调用在另一个函数中定义的函数
我可以从全局范围内调用一个嵌套在另一个函数里的函数吗?这是在Python 3.2中。
def func1():
def func2():
print("Hello")
return
return
有没有办法从func1()外部调用func2()?
4 个回答
0
def func1():
def func2():
global fudu
fudu = func2
print("Hello")
func2()
func1()
fudu()
print 'fudu' in dir()
print 'func2' in dir()
结果
Hello
Hello
True
False
还有:
def func1():
global func2
def func2():
print("Hello")
func2()
func1()
print 'func2' in dir()
func2()
结果
Hello
True
Hello
这有什么意思?
11
你想要使用@larsmans'的解决方案,但理论上你可以直接进入本地可访问的func1
的代码对象,然后切出func2
的代码对象并执行它:
#!/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, <code object func2 at 0x100430c60, file "/tmp/8457669.py", line 4>)
exec(func1.__code__.co_consts[1])
# => prints 'Hello'
不过,再次强调,这不适合用于生产环境。
注意:如果你使用的是Python 2版本,把__code__
换成func_code
(并从__future__
中导入print_function
)。
一些进一步的阅读资料:
23
不,除非你返回这个函数:
def func1():
def func2():
print("Hello")
return func2
innerfunc = func1()
innerfunc()
或者甚至
func1()()