我想知道我是否可以创建一个函数,在它的参数中我可以定义用于其他东西的函数? 例如:
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!")
我不知道我是否解释得非常好但是如果你可以帮我解决这个问题那就太棒了。
答案 0 :(得分: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()
以生成具有预定义参数的callables。