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

2024-10-02 02:27:52 发布

您现在位置: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)

我不太喜欢。你知道吗

对我来说,这似乎是一种很常见的情况。你知道吗

在这种情况下,人们还会用其他的成语吗?你知道吗


Tags: 函数用户default参数def情况dictkwargs
3条回答

可以使用setdefault

def bigFun(par1, **kwargs):
    kwargs.setdefault(keyX, valueX)
    kwargs.setdefault(keyY, valueY)
    innerFun(**kwargs)
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)

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

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

相关问题 更多 >

    热门问题