如何在Python函数中绑定参数的给定值?
我有一些函数,它们的参数既有位置参数也有关键字参数。我想把其中一个参数绑定到一个特定的值,这个值只有在函数定义后才能知道。有没有什么通用的方法可以做到这一点呢?
我第一次尝试是:
def f(a,b,c): print a,b,c
def _bind(f, a): return lambda b,c: f(a,b,c)
bound_f = bind(f, 1)
不过,这样做的话,我需要知道传给f
的确切参数,而不能用一个函数来绑定我感兴趣的所有函数,因为它们的参数列表都不一样。
4 个回答
17
正如MattH的回答所建议的,使用functools.partial
是个不错的选择。
不过,你的问题可以理解为“我该如何实现partial
”。你的代码缺少的是对*args
和**kwargs
的使用——实际上有两个这样的用法:
def partial(f, *args, **kwargs):
def wrapped(*args2, **kwargs2):
return f(*args, *args2, **kwargs, **kwargs2)
return wrapped
21
你可能想要使用来自functools的partial
函数。
154
在编程中,有时候我们需要让程序在特定的条件下执行某些操作。比如说,当我们想要检查一个数字是否在某个范围内,或者判断一个字符串是否包含特定的字符。这些操作通常会用到“条件语句”。
条件语句就像是一个分岔路口,程序会根据条件的真假来决定走哪条路。如果条件成立,程序就会执行某段代码;如果条件不成立,程序就会跳过这段代码,继续执行后面的内容。
举个简单的例子,假设我们有一个数字,如果这个数字大于10,我们就打印“这个数字很大”;如果小于等于10,我们就打印“这个数字不大”。这就是条件语句的基本用法。
在编程中,条件语句的写法可能会有所不同,但它们的核心思想都是一样的:根据条件的真假来决定执行的代码。
>>> from functools import partial
>>> def f(a, b, c):
... print a, b, c
...
>>> bound_f = partial(f, 1)
>>> bound_f(2, 3)
1 2 3