参考1:https://www.jianshu.com/p/d09778f4e055
参考2:https://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/
1 def cash_out(amount): 2 while amount >0: 3 amount -= 1 4 yield '其实你也可以办理分期还款' 5 a=cash_out(5) 6 print(a.__next__())
运行结果:
1 >>> 2 RESTART: C:/Users/asdf/AppData/Local/Programs/Python/Python36/tryyyyy/TEXTgaojie.py 3 其实你也可以办理分期还款 4 >>>
然后是斐波那契數列的例子:
1 def fab(max): 2 n, a, b = 0, 0, 1 3 while n < max: 4 yield b 5 a, b = b, a + b 6 n = n + 1 7 8 for n in fab(10): 9 print(n) 10 11 print(fab(10))
运行结果是:
1 RESTART: C:/Users/asdf/AppData/Local/Programs/Python/Python36/tryyyyy/TEXTgaojie.py 2 1 3 1 4 2 5 3 6 5 7 8 8 13 9 21 10 34 11 55 12 <generator object fab at 0x000001A510F73830> 13 >>>
必要的总结:
带有 yield 的函数不再是一个普通函数,而是一个生成器generator,可用于迭代,工作原理同上。
yield 是一个类似 return 的关键字,迭代一次遇到yield时就返回yield后面(右边)的值。重点是:下一次迭代时,从上一次迭代遇到的yield后面的代码(下一行)开始执行。
简要理解:yield就是 return 返回一个值,并且记住这个返回的位置,下次迭代就从这个位置后(下一行)开始。

浙公网安备 33010602011771号