Python中的生成器.pdf
文本预览下载声明
继继续续微微笑笑llssjj
欲欲穷穷千千里里 目目,,更更上上一一层层楼楼 !! ————————LLSSJJ
PPyytthhoonn中中 生生成成器器
分类: Python 2013-11-25 18:38 270人阅读 评论 (0) 收藏 举报
Python生成器
11..何何为为生生成成器器
生成器就是一种迭代器。生成器拥有next方法并且行为与迭代器完全相同,这意味着
生成器也可以用于Python for循环中。生成器是一种普通 函数语法定义 迭代器。任何包含
yield语句 函数称为生成器。即我们定义一个生成器就是定义一个普通 函数,但是在函数里面
使用yield关键字,调用生成器函数时将返回一个生成器。
def generator_func():
yield 1
yield 2
generator = generator_func() #生成器函数返回一个生成器
print (generator)
generator object generator_func at 0x021D2D2
22..生生成成器器 特特性性
(1)第一次调用next()时,生成器才开始执行生成器函数,直直到到遇遇到到yyiieelldd时时暂暂停停执执行行
((挂挂起起)),,并并且且yyiieelldd 参参数数作作为为此此次次执执行行 返返回回值值;;之后每次执行生成器 next方法都是从暂
停 位置恢复执行,直到再次遇到yield又停止,并且yield 参数又作为next方法 返回值;如果
调用next方法时,生成器函数结束 (遇到空 return语句或者到函数末尾),则该次next方法会抛
出StopIteration异常 (即for循环 终止条件)。
【注】调用生产器函数只是返回了一个生成器。
print (next(generator))
print (next(generator))
print (next(generator)) #生产器已经结束,抛出StopIteration
1
2
Traceback (most recent call last):
File C:\Users\Administrator\Desktop\test_python.py, line 9, in module
print (next(generator))
StopIteration
(2)生成器在每次暂停执行时,生成器类 所有变量都被
封存在生成器中。并在恢复执行时复原。同一个生成器函数返回 不同生成器之间相互独立。
def fab_generator_func():
yield 1
yield 1
f1 = 1
f2 = 1
while True: #这里一定是死循环
f1,f2 = f2,f1+f2
yield f2
for g1 in fab_generator_func(): #自动调用迭代器next方法
if(g1 10):break
print (g1,)
1
for g2 in fab_generator_func(): #自动调用迭代器next方法
if(g2 10):break
print (g2,)
1 1 2 3 5
1 1 2 3 5
33..生生成成器器方方法法
send方法:外部作用域访问生成器 send方法,就像访问next方法一样,只不过前者使
用一个参数 (要发送 消息)。
def generator_func(value):
while True:
new = (yield value)
if new is not None:val
显示全部