如何将参数绑定到 Python 函数,以便稍后可以在没有参数的情况下调用它(或使用更少的附加参数)?
例如:
def add(x, y):
return x + y
add_5 = magic_function(add, 5)
assert add_5(3) == 8
我在这里需要的 magic_function
是什么?
人们在尝试为回调提供参数时不小心立即调用函数的框架和库经常发生:例如 on_event(action(foo))
。解决方案是绑定 foo
作为 action
的参数,使用此处描述的技术之一。参见例如 如何在 Tkinter 中将参数传递给 Button 命令? 和 在 Python 中使用字典作为 switch 语句。
但是,某些 API 允许您单独传递要绑定的参数,并会为您进行绑定。值得注意的是,标准库中的线程 API 以这种方式工作。 在调用 Thread.start 之前查看线程开始运行。如果您尝试像这样设置自己的 API,请参阅 如何编写简单的回调函数? .
显式绑定参数也是一种避免在使用闭包时因延迟绑定引起的问题的方法。这就是问题所在,例如, lambda
循环或列表推导中的 for
循环或列表理解会产生计算相同结果的单独函数。请参阅 lambda 函数闭包捕获什么? 和 在循环(或理解)中创建函数(或 lambda) 。
原文由 Dustin Getz 发布,翻译遵循 CC BY-SA 4.0 许可协议
functools.partial
返回一个可调用的包装函数,其中一些或所有参数被冻结。以上用法等同于以下
lambda
。