【发布时间】:2012-10-18 09:13:16
【问题描述】:
我很好奇这里发生了什么。知道生成器和协程的人能否很好地解释一下这段代码。
def b():
for i in range(5):
yield i
x = (yield)
print(x)
def a():
g = b()
next(g)
for i in range(4):
g.send(5)
print(next(g))
a()
输出
None
1
None
2
None
3
None
4
但是当我切换第 3 行和第 4 行:yield i 和 x = (yield) 行时,我得到以下信息。
5
None
5
None
5
None
5
None
我怀疑问题可能是我尝试使用 yield 语句在同一个函数中接收和发送值。这在 Python 中是不可能的吗?
我已经成功编写了几个使用协程的程序,所以我熟悉它们的工作方式,但我对这段 sn-p 代码的行为方式感到困惑。对此的任何见解将不胜感激。
谢谢
编辑:感谢 BrenBarn 和 unutbu 的回答。当您将问题展开时,这里发生的事情会更有意义。
def b():
for i in range(5):
yield i
x = yield None
def a():
g = b()
print('* got', g.send(None) )
for i in range(4):
print('+ got', g.send(5) )
print('- got', g.send(None))
a()
【问题讨论】:
标签: python generator coroutine