TypeError: objet de type de l'argument après * doit être un ordre, pas de générateur

Pourquoi le code Python suivant génère une erreur
TypeError: type object argument after * must be a sequence, not generator
alors que si j'commentaire de la première (inutile) dans le générateur de f, tout fonctionne bien?

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. Ce que je suis en train d'essayer de faire, avec un seul générateur, de retour de plusieurs itérateurs (autant que je vais passer à la génératrice arguments). Le seul moyen que j'ai trouvé à faire, c'est-à rendement tuples et l'utilisation izip () - magie noire pour moi.

Vous pourriez trouver tee de itertools intéressant ...
tee a pour courir à travers et stocker tous les éléments une fois avant de pouvoir dupliquer l'itérateur, cf. la documentation: docs.python.org/3.1/library/itertools.html#itertools.tee. Malheureusement, il n'y a pas de magie, et mon but ici était naïf.

OriginalL'auteur JulienD | 2013-03-21