Возможность повторения без аннотации типа побочного эффекта - PullRequest
1 голос
/ 26 января 2020

Я ищу Iterable, который можно повторять без побочных эффектов. Например, я хочу аннотировать следующие аргументы x:

def foo(x: NoSideEffectIterable[int]):
    for i in range(10):
        for xx in x: # x is iterated 10 times here
            print(i*xx)
  1. Iterable не подходит, потому что x повторяется более одного раза
  2. Sequence не подходит, потому что порядок x не имеет значения

Как комментировать x?

Ответы [ 2 ]

1 голос
/ 26 января 2020

Нет комментариев для этого. Это не концепция, которую система типов может express. Iterable ваша лучшая ставка. Если вы хотите получить более строгие ограничения, вы можете использовать Collection, но, хотя Iterable выражает меньше требований, чем вы хотите, Collection выражает больше.

0 голосов
/ 26 января 2020

Попробуйте с Iterator[int]. Итераторы в Python являются итераторами, которые потребляются после того, как вы их итерировали один раз. Надеюсь, это поможет

...