【发布时间】:2015-06-19 09:49:05
【问题描述】:
我们在 Python 的 yield 上发现了一个有趣的问题。我们编写了一个简单的程序:
def F():
for i in range(5, 9):
for j in range(21, 29):
x = yield i
y = (yield j) * 100
x += y
print '>>>', x
gen = F()
next(gen)
a1 = gen.send(66)
a2 = gen.send(77)
print a1
print a2
结果是惊人的:
>>> 7766
21
5
i=5, j=21 => 产量 i => a1=21 => 发送(66) => x = 66
i=5, j=21 => 产量 j => a2=5 => 发送(77) => y = 7700
打印 7766
打印 21
打印 5
即在yield i之后,a1得到j的值;在yield j之后,a2得到i的值。
有人知道为什么yield 会这样吗?为什么不是 a1=5,a2=21?
【问题讨论】:
-
@AshwiniChaudhary 很抱歉错过了 next() 函数已执行。