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

Python 3.x中Generator类型提示的SendType和ReturnType有何用途?

Generator[YieldType, SendType, ReturnType] 后两个类型参数的用途

生成器的能力不止于产出值,它还支持接收外部传入的值、返回最终结果,SendType和ReturnType就是用来标注这两种场景的类型:

  • SendType:标注调用生成器send(value)方法时传入参数的类型。生成器内部可以通过yield表达式接收这个值(格式为received = yield 产出值),received的类型就对应SendType。如果你的生成器不需要接收外部传入的值,这个类型可以设为None。

示例代码:

from typing import Generator

def echo() -> Generator[str, str, None]:
    while True:
        msg = yield "请输入内容:"
        yield f"你输入了:{msg}"

gen = echo()
next(gen)  # 启动生成器,获取初始产出值
print(gen.send("Hello World"))  # 传入字符串类型,得到对应输出
  • ReturnType:标注生成器函数执行到return语句时返回值的类型。这个返回值不会通过常规迭代获取,需要捕获StopIteration异常,通过异常的value属性拿到。

示例代码:

from typing import Generator

def countdown(n: int) -> Generator[int, None, str]:
    for i in range(n, 0, -1):
        yield i
    return f"倒计时结束,共{n}秒"

gen = countdown(3)
for num in gen:
    print(num)  # 输出3、2、1
try:
    next(gen)
except StopIteration as e:
    print(e.value)  # 输出"倒计时结束,共3秒"

如果只需要标注生成器的产出类型,也可以用Iterable[YieldType]或Iterator[YieldType],但如果要精确描述生成器与外部的交互逻辑,就需要用到完整的Generator泛型定义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 02:48:17