我可以在Python 3.2的全局作用域中调用嵌套在另一个函数内部的函数吗?
def func1():
def func2():
print("Hello")
return
return
是否有一种方法可以从func1()外部调用func2()?
我可以在Python 3.2的全局作用域中调用嵌套在另一个函数内部的函数吗?
def func1():
def func2():
print("Hello")
return
return
是否有一种方法可以从func1()外部调用func2()?
def func1():
def func2():
print("Hello")
return func2
innerfunc = func1()
innerfunc()
甚至更多
func1()()
您想要使用@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
)。
进一步阅读:
def func1():
global func2 # put it in global scope
def func2():
print("Hello")
现在你可以直接调用func2。
但是在调用func2()之前必须先调用func1(),否则它还没有被定义。
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
有什么兴趣?
global
关键字可能会引起某些人的反感。 - Keith Pinson
func1()
函数时,才会生成func2()
对象。为了解耦这些紧密绑定的def
语句,我建议始终单独定义每个函数,然后使用func1()
作为func2()
的包装器进行调用。 - yurisich