0

我不知道这是否可能我对python还是很陌生,但是我想调用的函数中有一个函数,是否可以调用菜单中的add()或sub()函数()? 我尝试了不同的方式来调用它(我认为的每一种方式都是有意义的)但产生了一个错误----name 'add' is not defined---

def menu():
    def add():
        print 6+6
    def sub():
        print 6-3
4

4 回答 4

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
于 2013-09-14T16:20:42.630 回答
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

但是,这些情况都没有真正显示出在菜单中定义您的addsub功能的充分理由。通常最好在代码的顶层定义它们,即使您要从其他函数调用或返回它们(至少,它会使测试它们更容易)。

于 2013-09-14T16:33:35.157 回答
1

你怎么称呼它,它对我来说很好用:

def menu():
    def add():
        print 6+6
    def sub():
        print 6-3
    add()

>>> menu()
12
于 2013-09-14T16:20:48.807 回答
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
于 2013-09-14T16:46:39.120 回答