Python关键字参数

Python关键字参数,python,keyword-argument,Python,Keyword Argument,我有几个层次的函数调用,传递关键字参数的通用字典: def func1(**qwargs): func2(**qwargs) func3(**qwargs) 我想在一些后续函数调用中提供一些默认参数,如下所示: def func1(**qwargs): func2(arg = qwargs.get("arg", default), **qwargs) func3(**qwargs) 这种方法的问题是,如果arg在qwargs中,则会引发一个TypeError,

我有几个层次的函数调用,传递关键字参数的通用字典:

def func1(**qwargs):
    func2(**qwargs)
    func3(**qwargs)
我想在一些后续函数调用中提供一些默认参数,如下所示:

def func1(**qwargs):
    func2(arg = qwargs.get("arg", default), **qwargs)
    func3(**qwargs)
这种方法的问题是,如果arg在qwargs中,则会引发一个TypeError,其中包含“Get multiple values for keyword argument”

我不想将qwargs[“arg”]设置为默认值,因为func3在没有保证的情况下获取此参数。我可以制作qwargs的copy.copy并在副本中设置“arg”,但qwargs中可能有大型数据结构,我不想复制它们(可能copy.copy不会,只有copy.deepcopy?)


pythonic在这里要做什么?

只需构建并使用另一个dict来调用
func2
,将原始dict留给以后调用
func3

def func1(**qwargs):
    d = dict(arg=default)
    d.update(qwqargs)
    func2(**d)
    func3(**qwargs)
如果您希望在
qwargs
中设置
arg
,以覆盖
默认值
。否则(如果希望
default
覆盖
qwargs
arg
的任何可能设置):


由于
dict
的关键字参数会覆盖位置参数中的值(如果有)。

只需构建并使用另一个dict来调用
func2
,将原始dict留给以后调用
func3

def func1(**qwargs):
    d = dict(arg=default)
    d.update(qwqargs)
    func2(**d)
    func3(**qwargs)
如果您希望在
qwargs
中设置
arg
,以覆盖
默认值
。否则(如果希望
default
覆盖
qwargs
arg
的任何可能设置):


因为
dict
的关键字参数会覆盖位置参数(如果有)中的值。

以使用相同的键和值创建新的dict

 newdict=dict(qwargs)
如果qwargs不包含太多的密钥,那就便宜了


如果可能的话,您可以重写函数,使其参数真正成为dict,而不是多个参数。

使用您可以使用的相同键和值创建新dict

 newdict=dict(qwargs)
如果qwargs不包含太多的密钥,那就便宜了


如果可能的话,您可以重写函数,使其参数真正成为dict,而不是多个参数。

qwargs
听起来像数据,
func*
听起来像方法。你有没有想过把这两个学生合并成一个班?如果这样做,那么
func2
的签名可能会简化为类似
func2(self,arg=default)
qwargs
听起来像数据,而
func*
听起来像方法。你有没有想过把这两个学生合并成一个班?如果您这样做,那么
func2
的签名可能会简化为类似
func2(self,arg=default)
。。。