[Python-es] scope de variables
Pedro Gracia
lasarux en neuroomante.com
Vie Jun 18 17:37:09 CEST 2010
El 18/06/10 16:38, Oswaldo Hernández escribió:
> Milton Galo Patricio Inostroza Aguilera escribió:
>> El día 18 de junio de 2010 09:43, Oswaldo Hernández
>> ......
>>> La funcion imagen() no ve las variables que has definido fuera de ella.
>>
>> Eso lamentablemente es un error bastante común en los programadores
>> (yo igual antes pensaba eso). La función ve TODO lo que está
>> definida en su scope al momento de nacer = Scope léxico o Scope
>> estático (también lo llaman).
>>
>
> explícame esto:
>
> >>> def func1():
> ... def func2():
> ... a = 5
> ... a = 0
> ... func2()
> ... print a
> ...
> >>>
> >>> func1()
> 0
Tienes que ver las funciones como contenedores aislados. Sólo las
variables que declares como globales serán vistas así por las funciones.
Todos los objetos en python tienen un 'id' y si los objetos son
diferentes, su 'id' también. Prueba este código para que salgas de dudas:
def func1():
def func2():
a = 5
print "func2 (verás que el id de 'a' es diferente al que
espera): ", id(a)
a = 0
print "func1 (antes de llamar a func2): ", id(a)
func2()
print "func1 (despues de llamar a func2), e igual que antes de
llamar a func2 porque es el mismo objeto y fun2 creo un objeto nuevo
para su 'a': ", id(a)
func1()
Un saludo,
Pedro
Más información sobre la lista de distribución Python-es