Python关键字参数

时间:2010-04-30 15:34:24

标签: 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,并为“获取关键字参数的多个值”。

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

这里做什么pythonic?

2 个答案:

答案 0 :(得分:2)

只需构建并使用另一个字典来调用func2,将原始字体留给func3稍后调用:

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

如果您希望arg中的qwargs设置覆盖default,则可以使用此设置。否则(如果您希望default覆盖argqwargs的任何可能设置:

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。