Тип подсказка для конечной итерации - PullRequest
5 голосов
/ 11 апреля 2020

Моя функция foo принимает аргумент things, который внутренне превращается в список.

def foo(things):
    things = list(things)
    # more code

Конструктор list принимает любые итерации.

Однако, аннотирование things с typing.Iterable не дает пользователю подсказки о том, что повторяемое должно быть конечным, а не что-то вроде itertools.count().

Какой правильный тип подсказки использовать в этом случае?

1 Ответ

4 голосов
/ 11 апреля 2020

Я не знаю ни одного возможного способа достижения этого в Python, поскольку вы не можете предоставить такие ограничения в подсказках типов.


Однако, вероятно, Collection Тип может быть полезен в вашем контексте в качестве обходного пути:

class collections.abc.Collection

AB C для классов итерируемого размера контейнера.

Это требует объекты имеют __len__, что является более строгим требованием, чем конечное. Например, конечные генераторы не учитываются как Collection.

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