文档详情

Python中的生成器.pdf

发布:2017-09-13约6.96千字共7页下载文档
文本预览下载声明
继继续续微微笑笑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
显示全部
相似文档