Simon项

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

参考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 返回一个值,并且记住这个返回的位置,下次迭代就从这个位置后(下一行)开始。

posted on 2018-01-26 17:26  Simon项  阅读(159)  评论(0)    收藏  举报