В принципе, достаточно легко написать оболочку для итераторов, которая позволяет выполнять произвольное опережение, и некоторые вопросы были посвящены этому (например, Использование упреждающего просмотра с генераторами).
Однако, учитывая, что почти каждый нетривиальный анализ файлов будет полезен от такой возможности, это кажется слишком очевидным упущением для стандартной библиотеки; Неужели нет механизма встроенной или стандартной библиотеки, который позволял бы подглядывать?
В частности, мне обычно нужен просмотр, который работает между вызовами функций: подфункция должна иметь возможность проверять произвольное количество предстоящих элементов, не удаляя их из итератора — по сути, это тип данных очереди, где элементы лениво берутся из итератора.
В некоторых случаях collections.deque
или itertools.tee
можно использовать для создания обходных путей. Однако для удобочитаемости кода они неблагоприятны.