题
我有几层函数调用,围绕关键词参数的通用词典传递:
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的复制并在副本中设置为“ arg”,但是Qwargs可以在其中具有大的数据结构,我不想复制它们(也许Copy.copy不会,只有Copy.deepcopy.deepcopy ?)。
在这里要做什么pythonic?
解决方案
只是为了打电话而构建和使用另一个命令 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
覆盖位置参数中的值(如果有)。
其他提示
要使用相同的键和值创建一个新的命令,您可以使用
newdict=dict(qwargs)
如果Qwargs不包含真正便宜的钥匙。
如果可能的话,您可以将功能重写以将其args真正如dict而不是多个args采用。
不隶属于 StackOverflow