0

これが可能かどうかはわかりません。私はまだ Python を初めて使用しますが、呼び出したい関数内に関数があります。メニュー内の add() または sub() 関数を呼び出すことは可能ですか? ()? 私はそれを呼び出すためにさまざまな方法を試しました(私が理にかなっていると思ったすべての方法)が、エラーを生成しました----名前「追加」は定義されていません---

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

または、menu1 つ以上の関数を返すこともできます。呼び出し元のコードで新しい名前を付けて、後で呼び出すことができます。

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他の関数から呼び出したり返したりする場合でも、コードのトップレベルで定義する方がよい場合がよくあります (少なくとも、テストが容易になります)。

于 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

使い捨て関数にラムダを使用することもできます。

>>> 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 に答える