[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