Estoy tratando de averiguar esto:Python alcance
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
Gracias!
Estoy tratando de averiguar esto:Python alcance
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
Gracias!
En una función, las variables que se asignan se tratan como variables locales de forma predeterminada. Para asignar a las variables globales, utilice el global
declaración:
def g(n):
global c
c = c + n
Ésta es una de las zonas peculiares de Python que en realidad nunca ha sentado bien a mí.
El estado global es algo que se debe evitar, especialmente la necesidad de mutarlo. Tenga en cuenta si g()
simplemente debe tomar dos parámetros o si f()
y g()
necesitan ser métodos de una clase común con c
una instancia atribuir
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)
Salidas:
2
3
Aparte de lo que dijo Greg, en Python 3.0, habrá una declaración no local para indicar "aquí hay algunos nombres que se definen en el alcance adjunto". A diferencia de global, esos nombres deben estar ya definidos fuera del alcance actual. Será fácil rastrear nombres y variables. Hoy en día no se puede estar seguro de dónde se define exactamente "algo global".
erratas para Greg's post:
No debe haber antes de que se hace referencia a. Eche un vistazo:
x = 1
def explode():
print x # raises UnboundLocalError here
x = 2
Explota, incluso si x se asigna después de que se haga referencia a él. En Python, la variable puede ser local o referir al ámbito externo, y no puede cambiar en una función.
Esto es similar a PHP, también requiere el uso de 'global'. –