如何将参数绑定到Python函数中,以便稍后在不带参数(或带有较少附加参数)的情况下调用它?
例如:
def add(x, y):
return x + y
add_5 = magic_function(add, 5)
assert add_5(3) == 8
我需要在这里使用什么神奇函数
?
在使用框架和库时,人们经常会在试图将参数传递给回调函数时意外地立即调用一个函数,例如 on_event(action(foo))
。解决方法是使用本文中描述的技术之一,将 foo
绑定为 action
的参数。例如,请参见 如何在Tkinter中将参数传递给按钮命令? 和 在Python中使用字典作为开关语句。
然而,有些API允许您单独传递要绑定的参数,并会为您执行绑定。值得注意的是,标准库中的线程API就是这样工作的。请参见 在调用Thread.start之前线程开始运行。如果您正在尝试设置自己的API,请参见 如何编写一个简单的回调函数?。
显式绑定参数也是避免使用闭包时晚绑定问题的一种方法。这个问题是指,例如,在for
循环或列表推导式中的lambda
会产生计算相同结果的单独函数。请参见lambda函数闭包捕获了什么?和在循环(或推导式)中创建函数(或lambda)。