python的yield
yield语句是从Python2.2开始引入的
它只能用在一个generator(生成器)中,作为一个语句来执行并返回结果
当调用改generator的next方法时,会从上次的yield语句开始继续执行....
在python2.5中对yield进行了增强:
1.yield不再是一个语句,而是一个expression(表达式)了,这样我们就可以这样来使用了:
y = yield 6
2.增加了一个send(msg)函数:
当执行send(msg)函数后,msg参数将会替代整个yield x表达式的值
而next方法则相当于是执行了send(None)函数
send和next函数其实都是有返回值的,是下个yield的参数值(注意:不是整个yield表达式的值)。
3.增加了throw GeneratorExit方法,可以用来中断该generator方法
4.增加了close()方法,其实和throw的作用差不多。
通过下面这个列子,大概能明白yield的用法了:
# -*- coding: cp936 -*-
def gen():
for i in xrange(5):
print 'i: %d' % i
m = yield i
print 'm: ', m
g = gen()
n = g.next()
print 'g: %d' % n
n = g.next()
print 'g: %d' % n
n = g.send(6)
print 'g: %d' % n
n = g.send(None)
print 'g: %d' % n
g.throw(GeneratorExit)
n = g.next()