0

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

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事情是什么?

4

2 回答 2

2

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

def func1(**qwargs):
    d = dict(arg=default)
    d.update(qwqargs)
    func2(**d)
    func3(**qwargs)

这是如果您希望argin的设置qwargs覆盖default. 否则(如果您想覆盖in 的default任何可能设置):argqwargs

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

因为关键字参数dict覆盖位置参数中的值,如果有的话。

于 2010-04-30T15:38:48.957 回答
1

要创建具有相同键和值的新字典,您可以使用

 newdict=dict(qwargs)

如果 qwargs 不包含很多便宜的密钥。

如果可能的话,您可以重写函数以将它们的 args 真正作为 dict 而不是多个 args。

于 2010-04-30T15:53:07.877 回答