web-dev-qa-db-fra.com

Quel est l'indice de type de retour d'une fonction de générateur?

J'essaie d'écrire un :rtype: tapez un conseil pour une fonction de générateur. Quel est le type retourné?

Par exemple, disons que j'ai ces fonctions qui produisent des chaînes:

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

Le type de retour n'est pas seulement une chaîne, c'est une sorte de chaîne itérable? Je ne peux donc pas simplement écrire :rtype: str. Quel est le bon indice?

22

Générateur

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

18
aristotll

Le type générique d'annotation des générateurs est Generator[yield_type, send_type, return_type] fourni par le module typing :

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

Vous pouvez également utiliser Iterable[YieldType] ou Iterator[YieldType].

19
Eugene Yarmash