我有一个不使用send()
值的生成器。我应该将其输入send_value
为Any
还是None
?
import typing as t
def pi_generator() -> t.Generator[int, ???, None]:
pi = "3141592"
for digit in pi:
yield int(digit)
pi_gen = pi_generator()
next(pi_gen) # 3
pi_gen.send('foo') # 1
pi_gen.send(pi_gen) # 4
我认为的原因如下Any
:
- 该生成器适用
send()
于任何类型,因此如果有人有理由使用.send(1)
该生成器,那么完全没问题。 - 方法参数的类型应该是通用的,并且
.send(x: Any)
比更通用.send(x: None)
。
我认为的原因如下None
:
- 返回类型应该是具体的,“从不使用发送的生成器”比“任何类型的生成器”更具体。
- 如果有人正在使用
.send()
这个生成器,很可能他们误解了它的作用,而类型提示应该会告知他们。
引用文档
typing.Generator
:设置
SendType
为None
是传达生成器不期望被调用者输入send()
值的推荐方式。