这是我的代码:
def function1():
def function2():
print 'function2 has been called'
def function3():
pass
function1允许我按顺序调用function2和function3。 但是如何从function1外部调用function2或function3?
我尝试没有成功:
function1.function2()
和
import function1
function1.function2()
答案 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