已在函数中定义的调用函数

时间:2013-11-11 17:18:54

标签: python function call

这是我的代码:

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

function1允许我按顺序调用function2和function3。 但是如何从function1外部调用function2或function3?

我尝试没有成功:

function1.function2()

import function1
function1.function2()

3 个答案:

答案 0 :(得分:3)

您无法调用嵌套函数。它们仅限于function1()本地。

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

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

作为全局:

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

def function3():
    pass

def function1():
    # call the other functions
    function2()
    function3()

答案 1 :(得分: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。

答案 2 :(得分:0)

你需要创建模块可以是类

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

Python docs