python - 在 Python 中将数据发送到生成器

标签 python generator

我的目标是了解向 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

有人可以指出 None 值来自哪里以及如何解决这个问题。我的假设是,值不会传递给函数。但为什么会这样呢。我哪里出错了。

感谢您的提前答复。

最佳答案

None 值来自 received = Yield,这本质上意味着您正在生成 None 值。您的 spam() 函数中只需要有一个 yield:

def spam():
    received = None
    while True:
        received = yield received
        print("Message received from generator function:", received)


if __name__ == "__main__":
    s = spam()
    print(s)
    next(s)
    names = ["Bob", "Nancy", "Daniela", "Martin"]
    for name in names:
        print(s.send(name))

打印:

<generator object spam at 0x7f1518c8f9e8>
Message received from generator function: Bob
Bob
Message received from generator function: Nancy
Nancy
Message received from generator function: Daniela
Daniela
Message received from generator function: Martin
Martin

关于python - 在 Python 中将数据发送到生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56515033/

相关文章:

python - 如何检查字符串是否包含字母或字母和撇号但不包含数字?

python - Django 'bool' 对象没有属性 '_committed'

python - 使用 pandas 将行转换为列

Python:如何访问生成器对象中的元素并将它们放入 Pandas 数据框或字典中?

Python ctype 直接调用具有原始偏移量的函数

python - 使用生成器标记记录时保留 ID 引用

ruby-on-rails - Rails 4,带有生成器 'Could not find generator' 的自定义 gem

c# - C# 的随机数生成器是如何工作的?

javascript - 如何在 JavaScript 中使用异步生成器?

python - 为什么将生成器传递给 iter 来使用它的生成器函数?