3

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

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)

我不是特别喜欢。

这对我来说似乎很常见。

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

4

3 回答 3

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)
于 2013-07-15T23:54:37.860 回答
2

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

def bigFun(arg, def_arg='foo', other_arg='bar', **kwargs):
    innerFun(def_arg=def_arg, other_arg=other_arg, **kwargs)
于 2013-07-16T00:10:14.937 回答
1

你可以使用 setdefault

def bigFun(par1, **kwargs):
    kwargs.setdefault(keyX, valueX)
    kwargs.setdefault(keyY, valueY)
    innerFun(**kwargs)
于 2014-03-21T17:37:02.970 回答