El scope de una variable indica hasta dónde se extiende su vida. Si definimos una variable dentro de una función, fuera de ella deja de existir. Decimos que es una variable local:
def prueba():
x =3print"Dentro, x vale", x
prueba()print"Fuera, x vale", x
Si ejecutamos el script anterior obtendremos algo similar a lo siguiente:
Dentro x vale 3
Fuera x vale
Traceback (most recent call last):
File "<pyshell#5>", line 1,in<module>print"Fuera x vale", x
NameError: name 'x'isnot defined
En efecto, x no está definido fuera de la función. Nace y muere con ella.
El comportamiento es un poco más complejo con variables definidas fuera de la funciones u otros objetos (las llamadas variables globales). Podemos acceder a su valor simplemente usando su nombre como es lógico. Si escribimos esto
x=2def prueba():
print'x vale', x
prueba()
obtendremos de resultado
x vale 2
Pero si intentamos modificar el valor de la variable, Python piensa que es una variable local y nos dará error. Compruébalo:
x=2def prueba():
x = x + 2print'x vale', x
prueba()
El código anterior, al ejecutarlo, nos va a dar error:
Traceback (most recent call last):
File "prueba.py", line 7,in<module>
prueba()
File "prueba.py", line 4,in prueba
x = x + 2
UnboundLocalError: local variable 'x' referenced before assignment
Para solucionarlo, para poder modificar una variable global desde el interior de una función, basta con indicarle a Python que dicha variable es global. El código corregido es el siguiente:
x=2def prueba():
global x
x = x + 2print'x vale', x
prueba()
Varibales Locales y Globales
El scope de una variable indica hasta dónde se extiende su vida. Si definimos una variable dentro de una función, fuera de ella deja de existir. Decimos que es una variable local:Si ejecutamos el script anterior obtendremos algo similar a lo siguiente:
En efecto, x no está definido fuera de la función. Nace y muere con ella.
El comportamiento es un poco más complejo con variables definidas fuera de la funciones u otros objetos (las llamadas variables globales). Podemos acceder a su valor simplemente usando su nombre como es lógico. Si escribimos esto
obtendremos de resultado
x vale 2Pero si intentamos modificar el valor de la variable, Python piensa que es una variable local y nos dará error. Compruébalo:El código anterior, al ejecutarlo, nos va a dar error:
Para solucionarlo, para poder modificar una variable global desde el interior de una función, basta con indicarle a Python que dicha variable es global. El código corregido es el siguiente:
La salida, esta vez sin error, será
x vale 4