我不知道这是否可能我仍然是python的新手但我在函数中有一个我想调用的函数,是否可以调用add()或sub()函数在菜单()?我尝试了不同的方式来调用它(我认为每种方式都有意义)但产生了错误----名称'add'未定义---
def menu():
def add():
print 6+6
def sub():
print 6-3
答案 0 :(得分:4)
在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
答案 1 :(得分:2)
您定义函数的方式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
函数的充分理由。通常最好在代码的顶层定义它们,即使您要从其他函数调用或返回它们(至少,它会使测试更容易)。
答案 2 :(得分:1)
你怎么称呼它,它对我来说很好:
def menu():
def add():
print 6+6
def sub():
print 6-3
add()
>>> menu()
12
答案 3 :(得分:0)
您还可以将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