¿Puedo llamar a una función anidada dentro de otra función del scope global en python3.2?
def func1(): def func2(): print("Hello") return return
¿Hay alguna forma de llamar a func2 () desde fuera de func1 ()?
No, a menos que devuelvas la función:
def func1(): def func2(): print("Hello") return func2 innerfunc = func1() innerfunc()
o incluso
func1()()
Desea utilizar la solución de @larsmans , pero teóricamente puede cortarse en el objeto de código de la func1
accesible localmente y cortar el objeto de func2
de func2
y ejecutar eso:
#!/usr/bin/env python def func1(): def func2(): print("Hello") # => co_consts is a tuple containing the literals used by the bytecode print(func1.__code__.co_consts) # => (None,
) exec(func1.__code__.co_consts[1]) # => prints 'Hello'
Pero de nuevo, esto no es nada para el código de producción .
Nota: Para una versión de Python 2, reemplace __code__
con func_code
(e importe la print_function
de print_function
desde el __future__
).
Algunas lecturas adicionales:
Esto se basa en la solución de eyquem.
def func1(): global func2 # put it in global scope def func2(): print("Hello")
Ahora puedes invocar func2 directamente.
Pero habría que llamar a func1 () antes de poder llamar a func2 (), de lo contrario no se habrá definido aún.
def func1(): def func2(): global fudu fudu = func2 print("Hello") func2() func1() fudu() print 'fudu' in dir() print 'func2' in dir()
resultado
Hello Hello True False
También:
def func1(): global func2 def func2(): print("Hello") func2() func1() print 'func2' in dir() func2()
resultado
Hello True Hello
¿Cuál es el interés?
.
No creo que mi respuesta tenga un gran interés, pero el hecho es que también me pregunto cuál es la motivación de la pregunta y no veo ningún interés en resolver el problema planteado.