gpt4 book ai didi

接收和发出返回值的 Python 协程

转载 作者:太空狗 更新时间:2023-10-30 02:59:27 24 4
gpt4 key购买 nike

我正在阅读 Python Essential Reference,但我无法理解接收和发出返回值的协程。

作者是这么说的——“如果在 yield 表达式中提供值,协程可以使用 yield 同时接收和发出返回值。”

下面是一个例子来说明这一点:

def line_splitter(delimiter=None):
print("Ready to split")
result = None
while True:
line = (yield result)
result = line.split(delimiter)

作者进一步补充说,在这种情况下,我们像以前一样使用协程。但是,现在调用send() 也会产生一个结果。例如:

>>> s = line_splitter(",")
>>> s.next()
Ready to split
>>> s.send("A,B,C")
['A', 'B', 'C' ]
>>> s.send("100,200,300")
['100', '200', '300']

我想知道上面的代码是如何工作的。

感谢您的帮助。

最佳答案

让我们逐行看看调用代码做了什么:

  • s = line_splitter(",") 此行仅初始化生成器,执行其中的任何代码。
  • s.next() 这将执行代码直到并包括下一个 yield 语句,打印该行并产生 None。然而,分配 result = ... 尚未执行。
  • s.send("A,B,C") 这会将生成器 yield 的“值”设置为 "A,B,C" 并执行代码直到并包括下一个 yield,从而将其分配给 result

从某种意义上说,yield 关键字可以同时用于从生成器中获取值out(使用next)和在同时将值注入(inject)生成器(使用发送)。

要获得更深入的解释,您还可以查看 this answer .

关于接收和发出返回值的 Python 协程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31555566/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com