访问python中函数内的函数

时间:2012-08-20 05:23:02

标签: python

给定函数内的函数,如何从外部函数调用内部函数?

离。

def a():
    print 'a'
    def b():
        print 'b'
        def c():
            print 'c'

def d():
    # how would I now call a, b and c from here?
    def e():
        # how would I call a, b and c from here as well?

是的,我知道它可怕的代码结构,不应该这样做 - 但你是怎么做到的?

谢谢

编辑:使用装饰器的任何方法吗?

4 个答案:

答案 0 :(得分:7)

你做不到。 bca中的局部变量,除a正在执行外,不存在。

(因为这些是常量,你可以从技术上通过a.__code__.co_consts访问它们,但即使你对可怕的代码结构没有问题,这也不是一个真正的解决方案。你必须用{{1}执行函数并且你不能将参数传递给它。)

答案 1 :(得分:2)

你不能,因为这些函数是在调用外部函数时创建的,并在外部函数退出时被销毁。如果你想从其他地方访问它们,你需要在内部函数的某个地方引用一个内部函数。

答案 2 :(得分:1)

使用此结构,您只能在您指定的两个地方呼叫a()b()仅在a()运行时定义,而c()仅在b()运行时定义。 a()可以从任何地方调用,因为它全局定义。

例如:

def a():
    print 'a'
    def b():
        print 'b'
        def c():
            print 'c'

def d():
    # how would I now call a, b and c from here?
    a()
    def e():
        a()
        # how would I call a, b and c from here as well?

d()

结果

a

(同样,e()仅在d()正在运行时定义。d()a()一样,是全局定义的。)

答案 3 :(得分:0)

您可以更改外部功能,以便返回内部功能