Существует ли аннотация типа python для итераций, которые нельзя использовать? - PullRequest
1 голос
/ 24 марта 2020

Что-то похожее на:

def func(arg: Union[List[Any], Tuple[Any]]):
    ...

Тип будет применяться к любой итерируемой, которую нельзя использовать, при этом явно исключая, например, выражения генератора. Пример использования будет:

def func(arg: NonConsumableIterable[Any]):
    ...

Если этот тип существует, и я его пропустил, круто. Но если его не существует, мне было бы интересно понять, почему его нет.

1 Ответ

0 голосов
/ 30 марта 2020

Типовая аннотация Sequence - это, вероятно, аннотация, которую вы ищете. Обратите внимание, что последовательность не совпадает с непотребляемой итерацией , как отмечено в комментарии. Однако, если вы хотите, чтобы ваша итерация не использовалась, весьма вероятно, что вы также хотите, чтобы аргумент поддерживал len и __getitem__.

Из mypy docs :

Используйте Iterable для универсальных итераций c (что-либо пригодное для использования в for) и Sequence, где требуется последовательность (поддерживающая len и __getitem__).

A последовательность также определена в глоссарии python.

Итак, чтобы ответить на следующую часть вопроса, вероятная причина, почему аннотации для непотребляемых итерируемых не существует в основной библиотеке, потому что это не очень распространенный вариант использования. Тем не менее, если вам нужен действительно один, вы можете реализовать его с помощью generics

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...