我不知道这是否可能我对python还是很陌生,但是我想调用的函数中有一个函数,是否可以调用菜单中的add()或sub()函数()? 我尝试了不同的方式来调用它(我认为的每一种方式都是有意义的)但产生了一个错误----name 'add' is not defined---
def menu():
def add():
print 6+6
def sub():
print 6-3
我不知道这是否可能我对python还是很陌生,但是我想调用的函数中有一个函数,是否可以调用菜单中的add()或sub()函数()? 我尝试了不同的方式来调用它(我认为的每一种方式都是有意义的)但产生了一个错误----name 'add' is not defined---
def menu():
def add():
print 6+6
def sub():
print 6-3
在menu()
函数中,您在定义后直接调用它们:
def menu():
def add():
print 6+6
def sub():
print 6-3
add()
sub()
输出:
>>> menu()
12
3
要全局访问它们,您可以从中返回这些函数menu()
并将它们分配给全局变量。
>>> def menu():
def add():
print 6+6
def sub():
print 6-3
return add, sub
...
>>> add, sub = menu()
>>> add()
12
>>> sub()
3
您定义函数的方式,add
并且sub
是函数中的本地名称menu
。这意味着您只能在菜单运行时直接访问它们。
有几种方法可以解决这个问题。您可以menu
根据某些条件调用它们:
def menu(choice):
def add():
print 6+6
def sub():
print 6-3
if choice == 'add':
add() # call add here
elif choice == 'sub':
sub() # call sub here
或者,您可以menu
返回一个或多个函数,然后您可以在调用代码中为其指定一个新名称,然后再调用:
def menu(choice):
def add():
print 6+6
def sub():
print 6-3
if choice == 'add':
return add # returning the function, not calling it
elif choice == 'sub':
return sub # same here
func = menu('add')
func() # calls the add function defined in menu
但是,这些情况都没有真正显示出在菜单中定义您的add
和sub
功能的充分理由。通常最好在代码的顶层定义它们,即使您要从其他函数调用或返回它们(至少,它会使测试它们更容易)。
你怎么称呼它,它对我来说很好用:
def menu():
def add():
print 6+6
def sub():
print 6-3
add()
>>> menu()
12
您还可以将 lambda 用于一次性函数:
>>> def menu():
... add = lambda x, y: x + y
... sub = lambda x, y: x - y
... print add(6, 6)
... print sub(6, 3)
...
>>> menu()
12
3