更改 Python 中函数的关键字默认值

Changing keyword defaults of a function in Python

假设我有这样一个函数:

def func_1(a, b=1, c=None):
     code here

现在我想创建另一个具有相同内部结构但关键字参数不同的函数。

def func_2(a, b=2, c='asdf'):
    code here

一个选项是这样的闭包:

 def make_func(b, c):
     def func(a, b=b, c=c):
         code here
     return func

 func_1 = make_func(1, None)
 func_2 = make_func(2, 'asdf')

还有其他 concise/Pythonic 方法可以解决这个问题吗?

使用 functools.partial() object:

from functools import partial

func_2 = partial(func_1, b=2, c='asdf')

提供给部分的默认值可以在调用时再次覆盖:

>>> from functools import partial
>>> def func_1(a, b=1, c=None):
...     return a, b, c
...
>>> func_2 = partial(func_1, b=2, c='asdf')
>>> func_2(42)
(42, 2, 'asdf')
>>> func_2(42, b=5, c='spam')
(42, 5, 'spam')