[pyar] Accesar dentro de una función anidada.

craf pyclutter en gmail.com
Lun Mayo 9 11:47:36 ART 2011


-----Mensaje original-----
De: Daniel Moisset <dmoisset en machinalis.com>
Reply-to: Python Argentina <pyar en python.org.ar>
Para: Python Argentina <pyar en python.org.ar>
Asunto: Re: [pyar] Accesar dentro de una función anidada.
Fecha: Mon, 9 May 2011 11:37:30 -0300

2011/5/9 craf <pyclutter en gmail.com>:
> Hola a todos!.
>
> Este fin de semana lo pasé, tratando de dilucidar como poder accesar
> dentro de una función anidada:
> Ej.
>
> def uno():
>    def dos():
> ------->def tres():
> |           print "tres"
> |
> ¿Cómo accedo a la función tres desde afuera de la anidación?.

>No podés

>si te fijas, def f(args):..., es esencialmente una asignacion. O sea,
>es parecido a

>f = lambda args:...

>O sea, en esencia es como preguntar que si tenes

>def uno():
>    dos = lambda :...
>    variable_local = 17

>como haces para acceder a dos o a variable_local desde afuera de la funcion.

>Pero las variables locales de una funcion (ni el nombre ni el valor
>que asocias) existen hasta que no llamas a la funcion, y si no guardas
>una referencia, desaparecen.

>Lo que *si* podes hacer es llamar a la funcion, y que te
>devuelva/guarde en algun lado la funcion de adentro. Por ejemplo
>podes:

>def uno():
>   def dos():
>      def tres():
>         print "tres"
>      return tres # dos devuelve una referencia a la funcion interna
>   resultado = dos() # esto llama a dos, obtiene su resultado, que
>esun a referencia a tre
>   return resultado # y o devuelve

>variable_global = uno() # llama a uno, y guarda el resultado
>#aca variable_global tiene una referencia a la funcion tres
>variable_global() # Esto hace la llamada. O sea, imprime "tres"

>Saludos,

Hola Daniel!

Muchas gracias por tu aclaración!. Mi duda va por el lado si puedes llamar a la función tres y que imprima
la palabra "tres", al llamarla desde afuera. No es necesario que retorne nada.Llamas a la función sin argumentos.
¿Se puede hacer?.

Saludos.

Cristian




More information about the pyar mailing list