我有几层函数调用,传递一个关键字参数的公共字典:
def func1(**qwargs):
func2(**qwargs)
func3(**qwargs)
我想在一些后续函数调用中提供一些默认参数,如下所示:
def func1(**qwargs):
func2(arg = qwargs.get("arg", default), **qwargs)
func3(**qwargs)
这种方法的问题在于,如果arg在qwargs中,则会引发TypeError,并为“获取关键字参数的多个值”。
我不想将qwargs [“arg”]设置为默认值,因为func3在没有权限的情况下获取此参数。我可以制作qwargs的copy.copy并在副本中设置“arg”,但qwargs中可能有大型数据结构,我不想复制它们(也许copy.copy不会,只有copy.deepcopy ?)。
这里做什么pythonic?
答案 0 :(得分:2)
只需构建并使用另一个字典来调用func2
,将原始字体留给func3
稍后调用:
def func1(**qwargs):
d = dict(arg=default)
d.update(qwqargs)
func2(**d)
func3(**qwargs)
如果您希望arg
中的qwargs
设置覆盖default
,则可以使用此设置。否则(如果您希望default
覆盖arg
中qwargs
的任何可能设置:
def func1(**qwargs):
d = dict(qwargs, arg=default)
func2(**d)
func3(**qwargs)
因为dict
的keyword-argument会覆盖位置参数中的值,如果有的话。
答案 1 :(得分:1)
要使用相同的键和值创建新的dict,可以使用
newdict=dict(qwargs)
如果qwargs不包含很多便宜的密钥。
如果有可能你可以重写这些函数,将它们的args作为dict而不是多个args。