2009-02-24 14 views
0
for i in range(0,3): 
    j = 0 
    print 'incrementing ' 
    j += 1 
    print j 

impressionsPersistant valeur variable Python

incrementing 
1 
incrementing 
1 
incrementing 
1 

Comment puis-je persister la valeur de 'j' pour qu'il imprime:

1 
2 
3 
+0

s'il vous plaît reformater le code correctement. –

+0

Ouch. C'est une question incroyable. La balise [débutant] ne rend pas justice. –

+0

@ S.Lott: J'ai eu un stagiaire ici que j'ai dû expliquer en détail comment une boucle est supposée fonctionner. Au lieu de j = 0 il a utilisé f = open (...). Et il prétendait connaître C++ et Java. –

Répondre

16

Vous ne devriez pas réinitialiser j à zéro dans la boucle:

j = 0 
for i in range(0,3): 
    print 'incrementng ' 
    j += 1 
    print j 
-6

Un hack très sale si vous voulez mettre cela dans une fonction: les arguments par défaut! En Python, si un argument par défaut est un tableau, il devient « statique » et muable, vous pouvez le garder à travers différents appels, comme ceci:

def f(j = [0]): 
    j[0] += 1 
    print('incrementing', j[0]) 

f() # prints "incrementing 1" 
f() # prints "incrementing 2" 
f() # prints "incrementing 3" 

Amusez-vous!

Edit:

incroyable, downmoded sans aucune explication pourquoi ce hack est mauvais ou hors-sujet. Les arguments par défaut dans Python sont évalués au moment de l'analyse, ai-je tort? Je ne pense pas que je suis, je viens d'attendre des réponses intelligentes au lieu de points négatifs sur mon poste ...

+0

Pourquoi voudriez-vous faire cela? Je ne sais pas à propos de la partie de hack sale. Cependant, il me semble que vous avez mal compris la question. Il veut imprimer 1,2,3 et donc il ne doit pas réinitialiser j dans la boucle ... – batbrat

+0

Comme je l'ai dit, c'est un hack sale si vous voulez mélanger tout le code dans une fonction. Je n'ai pas mal compris la question, j'ai juste "émulé" un membre statique de la fonction, c'est le hack sale ... – random

+0

Je pense que le point fait est que l'OP est évidemment un débutant et faisait une erreur simple qui peut être facilement réparée , cette "solution" est totalement sans rapport avec la portée de la question. –

Questions connexes