J'essaie de comprendre ceci:
c = 1
def f(n):
print c + n
def g(n):
c = c + n
f(1) => 2
g(1) => UnboundLocalError: local variable 'c' referenced before assignment
Merci!
J'essaie de comprendre ceci:
c = 1
def f(n):
print c + n
def g(n):
c = c + n
f(1) => 2
g(1) => UnboundLocalError: local variable 'c' referenced before assignment
Merci!
Dans une fonction, les variables affectées sont traitées par défaut comme des variables locales. Pour affecter des variables globales, utilisez l'instruction global
:
def g(n):
global c
c = c + n
C’est l’une des zones bizarres de Python qui ne m’a jamais vraiment si bien accueilli.
L’état global est quelque chose à éviter, en particulier le besoin de le muter. Considérez si g()
devrait simplement prendre deux paramètres ou si f()
et g()
doivent être des méthodes d'une classe commune avec c
un attribut d'instance
class A:
c = 1
def f(self, n):
print self.c + n
def g(self, n):
self.c += n
a = A()
a.f(1)
a.g(1)
a.f(1)
Les sorties:
2
3
Errata pour le post de Greg :
Il devrait y avoir aucun avant qu'ils soient référencés . Jetez un coup d'oeil:
x = 1
def explode():
print x # raises UnboundLocalError here
x = 2
Il explose, même si x est attribué après sa référence. En Python, la variable peut être locale ou faire référence à une portée externe, et elle ne peut pas changer dans une fonction.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.