Yield在Python里面是个不容易理解的概念,通过一个程序(Python 2.7里面的),再加上
http://docs.python.org/release/2.5.2/ref/yieldexpr.html的注释,我们大概可以理解yield和set/next是如何改变代码执行的顺序和变量赋值的。
请看下面的程序
程序运行的结果是
x1 = 1
x2 = 2
x3 = (3, 6, None)
def s(v):
value1 = v
value2 = yield 1
value3 = yield 2
yield value1,value2,value3
h = s(3)
x1 = h.next() #第一次iter,函数s开始运行,传入参数v=3,一直运行到yield 1,从而x1 = 1
#(注意,此时还没有走到给value2赋值)
x2 = h.send(6) #第二次iter,函数s继续运行,value2 开始赋值等于传入的6,一直运行到 yield 2,从而x2 = 2
#(注意,此时还没有走到给value3赋值)
x3 = h.next() #第三次iter,函数s继续运行,由于next = set(None),所以Value3 = None,一直运行到yield value1, value2, value3,从而x3=(3,6,None)
print x1
print x2
print x3