调用另一个函数中定义的函数

时间:2011-12-10 15:41:48

标签: python python-3.x

我可以在python3.2中的全局范围内调用嵌套在另一个函数内的函数吗?

def func1():
    def func2():
        print("Hello")
        return
    return

是否可以从func1()外部调用func2()?

4 个答案:

答案 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

有什么兴趣?

修改

为什么我的回答被低估?

我不认为我的回答很有意思,但事实是我也想知道这个问题的动机是什么,我觉得没有兴趣解决问题。