gpt4 book ai didi

python-3.x - Python 在生成器中查找类型和返回类型

转载 作者:行者123 更新时间:2023-12-05 04:30:20 24 4
gpt4 key购买 nike

所以我在修补生成器,我发现生成器有一个 typing 对象(即生成器有一个别名)然后我偶然发现了关于 https://docs.python.org/3/library/typing.html#typing.Generator 上的 typing.Generator 对象的文档。这是文档必须说的:

A generator can be annotated by the generic type Generator[YieldType, SendType, ReturnType].

这让我想知道如何修改 SendTypeReturnType thingys文档建议以此为例:

def echo_round() -> Generator[int, float, str]:
sent = yield 0
while sent >= 0:
sent = yield round(sent)
return 'Done'

我假设第二个 sent 声明定义了 SendType,但是 yield 0 返回 None (或一开始不返回任何内容),因此引发 TypeError: '>=' not supported between instances of 'NoneType' and 'int'

SendType 是如何工作的,如何修改它,SendTypeReturnType 在什么情况下有用?

最佳答案

生成器有一个 send方法:

generator.send(value)

Resumes the execution and “sends” a value into the generator function. The value argument becomes the result of the current yield expression. The send() method returns the next value yielded by the generator, or raises StopIteration if the generator exits without yielding another value. When send() is called to start the generator, it must be called with None as the argument, because there is no yield expression that could receive the value.

另见 What's the purpose of "send" function on Python generators?

因此,使用您的生成器,您可以执行以下操作:

it = echo_round()
print(next(it)) # 0 -- we could also have printed: it.send(None)
print(it.send(1.1)) # 1
print(it.send(2.5)) # 2
print(it.send(-1.8)) # StopIteration: Done

...but yield 0 returns None

...除非我们在第一个 yield 完成后调用 send,就像上面的脚本一样。这里 yield 0 将返回 1.1

我们在这里看到所有三种类型:

it.send(1.1) 获取 SendType 的值(在本例中为 float),并返回 < em>YieldType(在本例中为 int),或者使用 ReturnType 的值引发 StopIteration 错误( str 在这种情况下)。

关于python-3.x - Python 在生成器中查找类型和返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72087769/

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