Тип аннотации для генератора глобуса - PullRequest
2 голосов
/ 26 апреля 2020

Моя функция должна возвращать генератор, который выдает файлы определенной c подписи через Path из модуля pathlib. Проблема в том, что я не понимаю, как правильно аннотировать функцию в Python 3.

Вот функция:

from pathlib import Path
from typing import Generator

def get_waves_generator(directory: str) -> ???:
    gen = Path(directory).rglob('*.wav')
    return gen

Я нашел этот ответ , который по сути является копией из документов. Мне нужно аннотировать его следующим

Generator[YieldType, SendType, ReturnType]

Что такое YieldType, SendType и ReturnType в моем случае?

1 Ответ

1 голос
/ 26 апреля 2020

С документы :

Генератор может быть аннотирован универсальным c типом Generator[YieldType, SendType, ReturnType]. Например:

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

Обратите внимание, что в отличие от многих других обобщений в модуле набора текста, SendType из Generator ведет себя противоречиво, а не ковариантно или инвариантно.

Если ваш генератор будет только значения доходности, установите SendType и ReturnType в None:

def infinite_stream(start: int) -> Generator[int, None, None]:
    while True:
        yield start
        start += 1

Поскольку этот генератор возвращает экземпляры pathlib.Path, вы можете сделать

from pathlib import Path
from typing import Generator

def get_waves_generator(directory: str) -> Generator[Path, None, None]:
    gen = Path(directory).rglob('*.wav')
    return gen
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...