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])

askquestion,functionname然后绑定到您传入的任何函数对象。()在名称后添加会调用该函数。

你也可以传入参数,但是你传入的所有函数都必须具有相同的签名。您可以将函数包装在一个lambda或其他函数对象中以传入额外的参数,或者查看functools.partial()生成带有预定义参数的可调用对象。

于 2013-10-06T18:48:30.007 回答