Pregunta

    

Esta pregunta ya tiene una respuesta aquí:

         

Estoy tratando de resolver esto:

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!

¿Fue útil?

Solución

Dentro de una función, las variables que se asignan se tratan como variables locales de forma predeterminada. Para asignar variables globales, use global declaración:

def g(n):
    global c
    c = c + n

Esta es una de las áreas peculiares de Python que nunca me sentó bien.

Otros consejos

El estado global es algo que se debe evitar, especialmente si se necesita mutarlo. Considere si g () debería simplemente tomar dos parámetros o si f () y g () deben ser métodos de una clase común con < código> c un atributo de instancia

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

Errata para publicación de Greg :

No debe haber antes de que se haga referencia a . Echar un vistazo:

x = 1
def explode():
    print x # raises UnboundLocalError here
    x = 2

Explota, incluso si se asigna x después de su referencia. En Python, la variable puede ser local o referirse al ámbito externo, y no puede cambiar en una función.

Aparte de lo que Greg dijo, en Python 3.0, habrá una declaración no local para indicar que "aquí hay algunos nombres que se definen en el ámbito adjunto". A diferencia de los globales, esos nombres ya tienen que estar definidos fuera del alcance actual. Será fácil encontrar nombres y variables. Hoy en día no puedes estar seguro de dónde " globals algo " está exactamente definido.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top