如何在python3中注释生成器?

时间:2014-12-03 05:25:08

标签: python python-3.x annotations

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)

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

3 个答案:

答案 0 :(得分:21)

typing module定义了Generator类型,您可以使用它:

Generator[yield_type, send_type, return_type] 

另见PEP 0484

答案 1 :(得分:10)

虽然Generator[x, y, z]存在,但在大多数情况下,您可能想使用不太冗长的Iterator

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

也为yield

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

答案 2 :(得分:1)

Python 3中的注释可以是任何有效的表达式,而不仅仅是一种类型,并且实际上并未用于内部任何内容(有关注释的更多信息,https://www.python.org/dev/peps/pep-3107)。没有关于如何使用这些注释的指导或标准,因此它们可以以对编码器最简单的方式使用(参见https://www.python.org/dev/peps/pep-0008#programming-recommendations)。

在您的特定情况下,您可以使用字符串或全局变量来指示您的类型,或者可能使用types.GeneratorType,尽管无法指示生成器生成int