yet another question à propos de yield !
Bonjour,
une petite question de syntaxe (qui cache peut être une question de philosophie pythonienne) à propos de yield :
Voici un petit exemple d'école pour illustrer ma question :
Je voudrais afficher les 5 premières valeurs renvoyées par une ch'tite fonction avec un yield,
et je n'y arrive qu'avec une syntaxe moche (à mon goût) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| # ch'tite fonction avec yield
def values ():
n = 5
while True :
yield n
n = n*2 - 4
# syntaxe qui marche, mais qui ne me convient pas :
for i,x in enumerate( values()) :
if i > 4 :
break
print x
# syntaxe qui ne marche pas, mais qui me conviendrait :
for i in xrange( 5 ):
print values() |
Y a-t-il un moyen de concilier les 2 ?
Petite précision : ma fonction values n'est pas forcement appelée depuis une boucle for ... xrange.
Ce que je voudrais, c'est que quelque soit le contexte depuis lequel je l'appelle, elle continue à me donner les valeurs suivantes.
Un truc du genre :
Code:
1 2 3 4
| if values() > 3 :
print values(),values()
spam = values()*values()
print spam + values() |
Bien sûr, je pourrais faire ça avec une variable globale...
Mais primo, ceci est un cas d'école, beaucoup plus simple que mon vrai problème, et secondo, je trouverais ça plus élégant avec yield !
Merci !