如何在Python 3中注释生成器?

问题描述 投票:0回答:2

Python 3.x 支持(可选)函数注释:

def add_ints(x:int, y:int) -> int :
    return x+y

我有时会遇到如何表示给定“类型”的问题,这一次,我有一个返回生成器的函数:

def myfunc(x: [int]) -> "generator that returns ints":
    #                     ^~~~~~~~~~~~~~~~~~~~~~~~~~
    return (n for n in x if n%2 == 0)

返回值应该如何注释?有什么可以参考的吗?

python python-3.x annotations
2个回答
81
投票

虽然

Generator[x, y, z]
存在,但大多数时候,您可能想使用不太冗长的
Iterator
:

def fn(x: int) -> Iterator[int]:
    return (n for n in range(x) if n%2 == 0)

也适用于

yield

def fn(x: int) -> Iterator[int]:
    for n in range(x):
        yield n

54
投票

打字模块定义了生成器类型,您可以像这样使用:

Generator[yield_type, send_type, return_type] 

另请参阅PEP 0484

© www.soinside.com 2019 - 2024. All rights reserved.