1

引数内で他の何かに使用する関数を定義できる関数を作成できるかどうか知りたいですか? 例えば:

def askquestion(functionname):
    userinput == str(input("Are you sure you want to run this? <y/n> "))
    if userinput = "y":
        functionname()
    elif userinput == "n":
        print("returning to main menu")
    else:
        print("That is not a valid input!")

うまく説明できたかどうかわかりませんが、これで私を助けてくれれば、それは素晴らしいことです。

4

1 に答える 1

4

はい、できます。関数オブジェクトを渡すだけです:

def foo():
    # do foo

def bar():
    # do bar

askquestion(foo)  # will run foo when `y` is typed.

Python 関数は第一級のオブジェクトであり、最初に定義された名前に割り当てられますが、他の名前にバインドすることもできます。

たとえば、それらをマッピングに保存してから、別の変数に基づいてマッピング内の関数を完全に検索できます。

map = {
    'spam': foo,
    'eggs': bar,
}

askquestion(map[anothervar])

askquestionfunctionnameは、渡した関数オブジェクトにバインドされます。()名前の後に追加すると、関数が呼び出されます。

引数も渡すことができますが、渡す関数はすべて同じ署名を持つ必要があります。または他の関数オブジェクトで関数をラップしてlambda、追加の引数を渡したり、functools.partial()事前定義された引数で callable を生成したりすることができます。

于 2013-10-06T18:48:30.007 に答える