生成器函数的返回类型提示是什么?

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

我正在尝试为生成器函数编写

:rtype:
类型提示。它返回的类型是什么?

例如,假设我有这个产生字符串的函数:

def read_text_file(fn):
    """
    Yields the lines of the text file one by one.
    :param fn: Path of text file to read.
    :type fn: str
    :rtype: ???????????????? <======================= what goes here?
    """
    with open(fn, 'rt') as text_file:
        for line in text_file:
            yield line

返回类型不仅仅是一个字符串,它是某种可迭代的字符串?所以我不能只写

:rtype: str
。什么是正确的提示?

python python-2.7 generator yield type-hinting
3个回答
131
投票

发电机

Generator[str, None, None]
Iterator[str]

python 3.9之前:

from typing import Generator

python 3.9 以上版本:

from collections.abc import Generator

79
投票

从 Python 3.9 开始,您可以使用来自

Generator[YieldType, SendType, ReturnType]
collections.abc
泛型来注释生成器。例如:

from collections.abc import Generator

def echo_round() -> Generator[int, float, str]:
    sent = yield 0
    while sent >= 0:
        sent = yield round(sent)
    return 'Done'

在早期版本的 Python 中,您可以从 Generator

 模块导入 
typing
 类。或者,可以使用 
Iterable[YieldType]
中的
Iterator[YieldType]
typing


1
投票

比较

Iterator
Generator
...

文档将

collections.abc.Generator
定义为“ABC for generator classes that implement ... the
send()
,
throw()
and
close()
methods”.

所以我将

collections.abc.Iterator[ReturnType]
用于“普通”生成器,并保留
collections.abc.Generator
用于我已实施
send()
/
throw()
/
close()
的情况。

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