我的目标是了解将数据发送到Python生成器的概念。以下是我的代码段和意外的输出:
def spam():
while True:
received = yield
print("Message received from generator function:", received)
yield received
if __name__ == "__main__":
s = spam()
print(s)
next(s)
names = ["Bob", "Nancy", "Daniela", "Martin"]
for name in names:
print(s.send(name))
输出:
7tvmb228:Own subhayan.bhattachary$ python test_generators.py
<generator object spam at 0x10873aa20>
Message received from generator function: Bob
Bob
None
Message received from generator function: Daniela
Daniela
None
有人可以指出我的价值来自何处,以及如何解决这个问题。我的假设是值不会传递给函数。但是为什么会这样呢。我要去哪里错了。
感谢您提前提出任何答案。
该文档指出:
通过调用其
send(value)
方法将值发送到生成器。此方法恢复生成器的代码,并且yield
表达式返回指定的值。如果__next__()
调用常规方法,则yield
返回None
。
解
next(s)
每次发送后都添加一个额外的“冲洗”None
结果。
def spam():
while True:
received = yield
print("Message received from generator function:", received)
yield received
if __name__ == "__main__":
s = spam()
print(s)
next(s)
names = ["Bob", "Nancy", "Daniela", "Martin"]
for name in names:
print(s.send(name))
next(s)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句