Perché il seguente codice Python genera un errore
TypeError: type object argument after * must be a sequence, not generator
mentre se io commento la prima linea (inutile) generatore di f, tutto funziona bene?TypeError: tipo di argomento oggetto dopo * deve essere una sequenza, non generatore
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. Quello che sto cercando di fare è, con un singolo generatore, restituire più iteratori (quanti ne passerò al generatore come argomenti). L'unico modo che ho trovato per farlo è di produrre tuple e usare izip() su di loro - magia nera per me.
Si potrebbe trovare 'tee' da itertools interessanti ... – Tathagata
' tee' deve correre attraverso e archiviare tutti gli elementi una volta prima di poter duplicare l'iteratore, cf. i documenti: https://docs.python.org/3.1/library/itertools.html#itertools.tee. Sfortunatamente non c'è magia, e il mio tentativo qui è stato ingenuo. – JulienD