我有几层函数调用,围绕关键词参数的通用词典传递:

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)

这是您想要设置 argqwargs 覆盖 default. 。否则(如果您想要 default 覆盖任何可能的设置 argqwargs):

def func1(**qwargs):
    d = dict(qwargs, arg=default)
    func2(**d)
    func3(**qwargs)

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

其他提示

要使用相同的键和值创建一个新的命令,您可以使用

 newdict=dict(qwargs)

如果Qwargs不包含真正便宜的钥匙。

如果可能的话,您可以将功能重写以将其args真正如dict而不是多个args采用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top