如何调用函数内的函数?

时间:2013-09-14 16:18:29

标签: python function python-2.7

我不知道这是否可能我仍然是python的新手但我在函数中有一个我想调用的函数,是否可以调用add()或sub()函数在菜单()?我尝试了不同的方式来调用它(我认为每种方式都有意义)但产生了错误----名称'add'未定义---

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

4 个答案:

答案 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)

您定义函数的方式addsubmenu函数中的本地名称。这意味着您只能在菜单运行时直接访问它们。

有几种方法可以解决这个问题。您可以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函数的充分理由。通常最好在代码的顶层定义它们,即使您要从其他函数调用或返回它们(至少,它会使测试更容易)。

答案 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