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

Daniel Moisset dmoisset en machinalis.com
Lun Mayo 9 11:37:30 ART 2011


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,

D.



More information about the pyar mailing list