Python:传递和更新默认参数idoms

时间:2013-07-15 23:49:55

标签: python

如果我将一个函数包装成一个更大的函数但我仍然想要访问内部函数的所有参数是习惯做的:

def bigFun(par1, **kwargs):
    innerFun(**kwargs)

现在,如果我想在包装函数中提供默认值,并且仍然允许用户覆盖这些值,我可以这样做:

def bigFun(par1, **kwargs):
    default_kwargs = dict(keyX=valueX, keyY=valueY, ...)
    default_kwargs.update(**kwargs)
    kwargs = default_kwargs
    innerFun(**kwargs)

我不是特别喜欢。

这对我来说似乎是一个普遍的情况。

在这种情况下,人们会使用其他任何成语吗?

3 个答案:

答案 0 :(得分:2)

def bigFun(par1, **kwargs):
    kwargs[keyX] = kwargs.get(keyX, valueX)
    innerFun(**kwargs)

或多对:

def bigFun(par1, **kwargs):
    for k,v in [('key1', 'val1'), ('key2', 'val2')]:
        kwargs[k] = kwargs.get(k, v)
    innerFun(**kwargs)

答案 1 :(得分:2)

您可以在包装函数中使用关键字表示法作为默认值,并将它们明确地传递给内部表达式:

def bigFun(arg, def_arg='foo', other_arg='bar', **kwargs):
    innerFun(def_arg=def_arg, other_arg=other_arg, **kwargs)

答案 2 :(得分:1)

您可以使用setdefault

def bigFun(par1, **kwargs):
    kwargs.setdefault(keyX, valueX)
    kwargs.setdefault(keyY, valueY)
    innerFun(**kwargs)