Я хотел бы представить функцию как часть библиотеки, которая принимает входной аргумент и возвращает выходной результат. Контракт для входного аргумента должен быть следующим:
- моя функция может перебирать его
- это нормально, если моя функция поддерживает ссылку на вход (например, возвращая объект, который хранит эту ссылку)
- можно перебирать входные данные более одного раза
На первый взгляд подходящей подписью будет:
Код: Выделить всё
from typing import Iterable
def do_sth(input: Iterable[str]) -> SomeResult:
...
Может быть другая попытка:
Код: Выделить всё
from typing import Sequence
def do_sth(input: Sequence[str]) -> SomeResult:
...
Мне пришло в голову решение — использовать подпись Iterable, а затем внутренне скопировать входные данные. Но это, похоже, создает потенциальную проблему с памятью, если исходная последовательность велика.
Есть ли решение этой проблемы, т. е. знает ли Python о концепции Iterable, которая каждый раз будет возвращать новый итератор?
Подробнее здесь: https://stackoverflow.com/questions/631 ... -over-mult
Мобильная версия