yield指令,可以暂停一个函数并返回中间结果。使用该指令的函数将保存执行环境,并且在必要时恢复。
生成器比迭代器更加强大也更加复杂,需要花点功夫好好理解贯通。
看下面一段代码:
def gen():
for x in xrange(4):
tmp = yield x
if tmp == 'hello':
print 'world'
else:
print str(tmp)
只要函数中包含yield关键字,该函数调用就是生成器对象。
g=gen()
print g #<generator object gen at 0x02801760>
print isinstance(g,types.GeneratorType) #True 我们可以看到,gen()并不是函数调用,而是产生生成器对象。
生成器对象支持几个方法,如gen.next() ,gen.send() ,gen.throw()等。
print g.next() # 0 调用生成器的next方法,将运行到yield位置,此时暂停执行环境,并返回yield后的值。所以打印出的是0,暂停执行环境。
print g.next() #None 1 再调用next方法,你也许会好奇,为啥打印出两个值,不急,且听我慢慢道来。

本文详细探讨Python的生成器,重点解析yield指令如何实现函数的暂停和恢复。通过实例代码,解释gen.next()、gen.send()和gen.throw()等方法的工作原理。进一步讨论了生成器在协同程序中的应用,以及如何利用生成器实现类似多任务的效果,以替代线程。文章还提及在面试中遇到的生成器相关问题。
最低0.47元/天 解锁文章
2580

被折叠的 条评论
为什么被折叠?



