1

这是我的代码:

def function1():
    def function2():
        print 'function2 has been called'
    def function3():
        pass

function1 允许我按顺序调用 function2 和 function3。但是如何从函数 1 之外调用函数 2 或函数 3?

我试过没有成功:

function1.function2()

和:

import function1
function1.function2()
4

3 回答 3

3

您不能调用嵌套函数。它们是本地的function1()

将它们的定义移出function1()使它们成为全局名称,在 内部调用它们function1(),或返回它们,以便任何调用的人function1()都可以获得对函数对象的引用。

另一个函数内的函数对象就像任何其他局部变量一样,仅对函数私有。

作为全局变量:

def function2():
    print 'function2 has been called'

def function3():
    pass

def function1():
    # call the other functions
    function2()
    function3()
于 2013-11-11T17:20:40.577 回答
1

如果您需要 function2 和 function3 作为内部函数(因为它们使用 function1 的局部变量,但没有作为 f2 或 f3 的参数传入,或其他原因),请编写一个返回函数的函数。

功能:

def function1(a,b):
    c = a+b
    d = a*b*c
    def function2(d):
        print c+d
    def function3():
        pass
    function2(d)

相当于:

def funcwrap(c):
    def inner(d):
        return c+d
    return inner

def function1(a,b):
    c = a+b
    d = a*b*c
    function2 = funcwrap(c)
    print function2(d)

这允许您在 function1 内部和外部创建和使用 function2。

于 2013-11-11T18:20:38.480 回答
0

您需要创建模块可以是类

class MySuperClass:
    def function2(self):
        print 'function2 has been called'
    def function3(self, someArg):
        print 'function3 has been called with argument: '+ someArg

Python 文档

于 2013-11-11T17:25:39.410 回答