在Python中更改函数的关键字默认值
假设我有这样一个函数:在Python中更改函数的关键字默认值,python,keyword-argument,Python,Keyword Argument,假设我有这样一个函数: def func_1(a, b=1, c=None): 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') 现在我想创建另一个具有相同内部结构但不同关键字参数的函数 def func_2(a, b=2
def func_1(a, b=1, c=None):
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')
现在我想创建另一个具有相同内部结构但不同关键字参数的函数
def func_2(a, b=2, c='asdf'):
code here
一种选择是这样的关闭:
def func_1(a, b=1, c=None):
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')
有没有一种更简洁的方法来解决这个问题?使用:
调用分部时,可以再次覆盖提供给分部的默认值:
>>> 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_2(a,b=2,c='asdf'):func_1(a,b,c)
@jornsharpe:闭包作为一个工厂来产生更多这样的函数。我也做了同样的评论,但当我意识到这一点时,我又删除了它。@MartijnPieters是真的,但是动态生成函数对于一小部分人来说似乎是不必要的(更不用说可能会使IDE的生活更加艰难)。或者OP实际上意味着改变,即改变现有函数对象中的默认值,这不是示例所做的。@jornsharpe我的意思是用相同的行为、不同的关键字创建另一个函数-很抱歉措辞含糊不清。