首页 > 编程语言 > 详细

Python的生成器

时间:2020-04-07 23:49:17      阅读:75      评论:0      收藏:0      [点我收藏+]

一 生成器与yield

  若函数体包含yield关键字,再调用函数,并不会执行函数体代码,得到的返回值即生成器对象

>>> def my_range(start,stop,step=1):
...     print(start...)
...     while start < stop:
...         yield start
...         start+=step
...     print(end...)
... 
>>> g=my_range(0,3)
>>> g
<generator object my_range at 0x104105678>

 

  生成器内置有__iter__和__next__方法,所以生成器本身就是一个迭代器

>>> g.__iter__
<method-wrapper __iter__ of generator object at 0x1037d2af0>
>>> g.__next__
<method-wrapper __next__ of generator object at 0x1037d2af0>

 

  因而我们可以用next(生成器)触发生成器所对应函数的执行,

>>> next(g) # 触发函数执行直到遇到yield则停止,将yield后的值返回,并在当前位置挂起函数
start...
0
>>> next(g) # 再次调用next(g),函数从上次暂停的位置继续执行,直到重新遇到yield...
1
>>> next(g) # 周而复始...
2
>>> next(g) # 触发函数执行没有遇到yield则无值返回,即取值完毕抛出异常结束迭代
end...
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

 

 

 

二 yield表达式应用

三 三元表达式、列表生成式、生成器表达式

  • 三元表达式
  • 列表生成式
  • 生成器表达式

 

Python的生成器

原文:https://www.cnblogs.com/liunaixu/p/12657021.html

(1)
(1)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!