2009-10-19 7 views
-3

J'ai ce code ici. La seule partie à laquelle je peux ajouter du code est dans main_____ APRÈS la ligne 'i = 1'. Ce script sera exécuté plusieurs fois et aura une certaine variable (peut-être pas 'i', pourrait être 'xy', 'var', n'importe quoi), en incrémentant de 1 à chaque fois. J'ai réussi à travailler en déclarant que «je» est global au-dessus de la méthode, mais malheureusement, je ne peux pas le garder comme ça.Python | Comment puis-je rendre cette variable globale sans l'initialiser comme 'global'

Existe-t-il un moyen de faire fonctionner 'i' comme une variable globale dans les paramètres mentionnés ci-dessus?

def main______(): 
    try: 
     i+=1 
    except NameError: 
     i=1 
main______() 
+3

« La seule partie que je peux ajouter du code à main_____ est après que la ligne « i = 1 » » Vraiment? Pourquoi? Cela n'a pratiquement aucun sens. –

+0

Et pourquoi appelez-vous la fonction principale ______()? C'est exactement 6 soulignements de trop. Cette question fait complètement défaut dans ce qui doit être beaucoup de contexte vraiment étrange. Ne posez pas de questions abstraites lorsque vous avez des problèmes concrets. –

+0

J'ai essayé de simplifier un problème complexe. Le nom de la méthode n'est pas pertinent. – frank

Répondre

1

Si vous souhaitez utiliser une variable globale, vous devez la déclarer globale. Qu'est-ce qui ne va pas avec ça?

Si vous avez besoin pour stocker l'état entre les appels, vous devez utiliser une classe

>>> class F(): 
...  def __init__(self): 
...   self.i=0 
...  def __call__(self): 
...   print self.i 
...   self.i+=1 
... 
>>> f=F() 
>>> f() 
0 
>>> f() 
1 
>>> f() 
2 
+0

+1 le premier. Deuxième devrait aller dans une machine de déchiquetage. –

+0

-1: La manière hacky est dangereusement proche d'un bug. Utiliser des objets mutables comme valeurs par défaut est si dangereux que le montrer ici est un problème qui attend de se produire. Même si c'est correct. C'est toujours une mauvaise chose. –

+0

En raison de la demande populaire, j'ai déchiqueté la façon hacky. –

Questions connexes