3

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

前任。

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

4 回答 4

8

你不能。 bc是内部的局部变量a,除了执行时不存在a

(由于这些是常量,您可以从技术上通过 访问它们a.__code__.co_consts,但这不是一个真正的解决方案,即使您对糟糕的代码结构没问题。您必须使用 执行该函数,exec并且不能将参数传递给它。)

于 2012-08-20T05:25:31.590 回答
2

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

于 2012-08-20T05:25:22.443 回答
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(),是全局定义的。)

于 2012-08-20T05:32:17.407 回答
0

你可以改变你的外部功能,所以它会返回你的内部功能

于 2012-08-20T11:06:54.913 回答