Pyhton generators and the yield keyword

  At a glance,the yield statement is used to define generators,repalcing the return of a function to provide a result to its caller without destorying local variables.Unlike a function,where on each call it starts with new set of variables,a generator will resume the execution where it was left off.

  被yield修饰的函数,会被python解释器当作generator

  示例代码:

def countdown():
i=5
while i>0:
yield i
i-=1
for i in countdown():
print(i)
print('********************')
def gen(n):#斐波那契数列
i=0
pref=1#s[n-2]
pres=2#s[n-1]
cur=0#s[n]
while i<n:
if i<2:
yield 1
else:
cur=pref+pres
yield cur
pref=pres
pres=cur
i=i+1
if __name__=='__main__':
for item in gen(20):
print(item)

输出:

5
4
3
2
1
********************
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765

  调用gen函数不会执行gen函数,它返回一个迭代器对象,第二次迭代时从yield x的下一条语句开始执行,再到下一次遇到yield。

  虽然执行流程按照函数的流程执行,但是每次执行到yield时就会中断,它使一个函数获得了迭代能力。

最新文章

  1. 推荐Linux管理员不可不知十大PHP安全要点 - SCutePHP
  2. vs2013发布网站
  3. Javascript高级程序设计——面向对象之创建对象
  4. 在django中使用自定义标签实现分页功能
  5. INNO SETUP 5.5.0以上版本中文语言包
  6. cmd窗口编码方式的修改
  7. C++11lambda表达式
  8. php获取客户端ip地址
  9. Asp.net网站后台代码不能访问-iis部署
  10. jquery之前后台交互
  11. Lucence.net索引技术 二
  12. Linux系统下基本命令
  13. dojo实现省份地市级联---省份数据源
  14. java中什么是序列化和反序列化
  15. js斐波那契数列
  16. jar包获取资源文件
  17. Dream_Spark版本定制第一课
  18. mysql 复制表数据,表结构的3种方法
  19. 【BZOJ1096】[ZJOI2007]仓库建设 斜率优化
  20. ELF文件和BIN文件

热门文章

  1. Bomb HDU - 3555
  2. PHP学习方向-进阶2(三)
  3. 《奋斗吧!菜鸟》 第八次作业:Alpha冲刺
  4. MySql数据库优化可以从哪几个方面进行?
  5. ZOJ - 2243 - Binary Search Heap Construction
  6. DOM对象属性(property)与HTML标签特性(attribute)
  7. PatentTips - Zero voltage processor sleep state
  8. hdu_1065_I Think I Need a Houseboat_201311160023
  9. Machine_learning--score
  10. Manacher求最长回文