Чай из itertools
Если вы читали предыдущие посты про итераторы, то примерно представляете как они работают (если нет, ищите по тегу #generators). Итератор обычно выдает значения по одному (с помощью метода
📌tee принимает два аргумента: исходный итератор и количество новых итераторов, на которые разделится исходный. А возвращает он кортеж из новых итераторов.
Вывод:
Видно, что каждый из полученных итераторов по сути является независимой копией исходного get_iter.
Несколько замечаний:
📌Не следует пытаться итерировать исходный get_iter, иначе производные итераторы могут потерять некоторые значения.
📌tee хранит в памяти извлеченные элементы, чтобы остальные потребители могли их получить, даже если исходный итератор уже сместился. Поэтому, если элементов много либо они большие, это может серьезно повлиять на расход памяти.
#tee #iterators
Если вы читали предыдущие посты про итераторы, то примерно представляете как они работают (если нет, ищите по тегу #generators). Итератор обычно выдает значения по одному (с помощью метода
__next__, например). Это означает, что получать значения из итератора может только один потребитель. Однако, это можно исправить.📌tee принимает два аргумента: исходный итератор и количество новых итераторов, на которые разделится исходный. А возвращает он кортеж из новых итераторов.
from itertools import tee
def get_iter():
for i in range(5):
yield i
one, two, three = tee(get_iter(), 3)
print(f'next is {next(one)}')
print(f'next is {next(two)}')
for item in three:
print(f'next is {item}')
Вывод:
next is 0
next is 0
next is 0
next is 1
next is 2
next is 3
next is 4
Видно, что каждый из полученных итераторов по сути является независимой копией исходного get_iter.
Несколько замечаний:
📌Не следует пытаться итерировать исходный get_iter, иначе производные итераторы могут потерять некоторые значения.
📌tee хранит в памяти извлеченные элементы, чтобы остальные потребители могли их получить, даже если исходный итератор уже сместился. Поэтому, если элементов много либо они большие, это может серьезно повлиять на расход памяти.
#tee #iterators