Dlaczego następujący kod Python zgłasza błąd
TypeError: type object argument after * must be a sequence, not generator
natomiast gdybym skomentować pierwszy (bezużyteczny) Linia generator f, wszystko działa poprawnie?TypeError: typ obiektu argumentem po * muszą być sekwencją, nie generatora
from itertools import izip
def z():
for _ in range(10):
yield _
def f(z):
for _ in z: pass # if I comment this line it works! (??)
for x in range(10):
yield (x,10*x,100*x,1000*x)
iterators = izip(*f(z))
for it in iterators:
print list(it)
N.B. Naprawdę próbuję to zrobić, używając pojedynczego generatora, zwracając wiele iteratorów (tyle, ile przekazuję do generatora jako argumenty). Jedyny sposób, w jaki to zrobiłem, to wydać krotki i użyć na nich izip() - czarnej magii do mnie.
Możecie znaleźć 'tee' z itertools ciekawych ... – Tathagata
' tee' musi przebiegać przez i przechowywać wszystkie elementy kiedyś może powielać iterator, cf. dokumenty: https://docs.python.org/3.1/library/itertools.html#itertools.tee. Niestety nie ma magii, a moja próba była naiwna. – JulienD