如何在Python函数中绑定参数的给定值?

91 投票
4 回答
69696 浏览
提问于 2025-04-16 00:53

我有一些函数,它们的参数既有位置参数也有关键字参数。我想把其中一个参数绑定到一个特定的值,这个值只有在函数定义后才能知道。有没有什么通用的方法可以做到这一点呢?

我第一次尝试是:

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

撰写回答