Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中更改函数的关键字默认值_Python_Keyword Argument - Fatal编程技术网

在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我的意思是用相同的行为、不同的关键字创建另一个函数-很抱歉措辞含糊不清。