You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

生成器类型注解:send参数类型应设为Any还是None?

不使用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的生成器”比“任意类型生成器”的语义更明确。
  • 如果有人对该生成器调用send(),大概率是误解了它的功能,类型注解可以起到提示、避免误用的作用。

两种写法都符合Python类型注解规范,具体选择取决于你的设计意图:

  • 若希望保留最大灵活性,允许调用者随意使用send(),选Any;
  • 若想明确告知调用者该生成器无需接收send()参数,避免误用,选None。

内容的提问来源于stack exchange,提问作者Kaia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 22:57:32