我可以在python3.2中的全局范围内调用嵌套在另一个函数内的函数吗?
def func1():
def func2():
print("Hello")
return
return
是否可以从func1()外部调用func2()?
答案 0 :(得分:17)
不,除非你返回功能:
def func1():
def func2():
print("Hello")
return func2
innerfunc = func1()
innerfunc()
甚至
func1()()
答案 1 :(得分:9)
您想要使用@larsmans'解决方案,但理论上您可以将自己切入本地可访问的func1
的代码对象,并切出{{1}的代码对象并执行:
func2
但同样,对于生产代码来说 。
注意:对于Python 2版本,将#!/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'
替换为__code__
(并从func_code
导入print_function
)。
进一步阅读:
答案 2 :(得分:0)
这是基于eyquem的解决方案。
while
现在你可以直接调用func2了。
但是在调用func2()之前必须调用func1(),否则它将不会被定义。
答案 3 :(得分:-1)
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
有什么兴趣?
。
我不认为我的回答很有意思,但事实是我也想知道这个问题的动机是什么,我觉得没有兴趣解决问题。