PEP 3107中生成器函数的正确类型注解关键词是什么?
生成器函数的正确类型注解(PEP 3107规范)
PEP 3107仅定义了函数注解的语法框架,具体的类型提示规范由PEP 484补充。针对带yield的生成器函数,正确的类型注解方式如下:
方式一:使用Generator类型
需要从typing模块导入Generator,它支持三个泛型参数:产出值类型、接收值类型、返回值类型。如果你的生成器不需要接收外部传入值,也没有明确的返回值,就把后两个参数设为None:
from typing import Generator def this_function() -> Generator[int, None, None]: for x in range(0,100): yield x
方式二:使用Iterator类型
如果只关心生成器产出的元素类型,用Iterator[int]也是合规的,但必须先导入Iterator类型:
from typing import Iterator def this_function() -> Iterator[int]: for x in range(0,100): yield x
Python 3.9及以上版本可以直接从collections.abc导入Iterator,无需依赖typing模块:
from collections.abc import Iterator def this_function() -> Iterator[int]: for x in range(0,100): yield x
你之前写法无效的原因
- 小写的
generator不是Python标准的类型提示对象,Pylance无法识别,必须使用大写的Generator并完成导入。 - 使用
Iterator[int]没效果,大概率是遗漏了Iterator的导入语句,先检查导入是否正确。
内容的提问来源于stack exchange,提问作者PhoenixizFire
相关产品推荐
相关产品推荐

