更改 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')
假设我有这样一个函数:
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')