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

如何为Python generator(生成器)指定正确的类型声明

你写的def f() -> Union[str,int]:是不正确的。
生成器函数执行后返回的是生成器对象,而非直接返回yield产出的值,因此不能直接把返回值标注为产出值的类型。


正确标注方法

Python提供了专用的Generator泛型类型用于标注生成器函数的返回值,它接收三个类型参数,格式为:
Generator[YieldType, SendType, ReturnType]
三个参数的含义分别是:

  • 第一个参数:生成器通过yield产出的值的类型,就是你需要的Union[str, int]
  • 第二个参数:调用生成器send()方法可以传入的值的类型,如果你不会主动调用send方法传值,填None即可
  • 第三个参数:生成器迭代结束后显式return返回的值的类型,没有显式return的话填None即可

代码示例

Python 3.9及以上版本可以直接从collections.abc导入Generator,3.10+还支持用|简化Union写法:

from collections.abc import Generator

def f() -> Generator[str | int, None, None]:
    yield "Banana"
    yield 68

如果使用3.9以下的Python版本,需要从typing模块导入对应类型:

from typing import Generator, Union

def f() -> Generator[Union[str, int], None, None]:
    yield "Banana"
    yield 68

简化写法

如果你仅会遍历这个生成器,不会用到send、throw等生成器专属方法,也可以直接标注为Iterable[Union[str, int]],语义同样成立:

from collections.abc import Iterable
from typing import Union

def f() -> Iterable[Union[str, int]]:
    yield "Banana"
    yield 68

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:36:04