包装 python 函数,但让外部函数具有关键字 arg



我希望能够包装一个函数,同时仍然允许在外部函数中使用可选的(关键字)参数。我可以这样做:

def outer(p1, p2, *a, **k):
     inner(*a, **k)

但是,如果我想让 p2 成为"可选参数"怎么办?明显地:

def outer(p1, p2=None, *a, **k):
     inner(*a, **k)

行不通,我知道为什么行不通。我想知道是否有一种漂亮、干净的方法来实现这一目标。是否有一些众所周知的模式或约定?

使用 functools 模块:

outer2 = functools.partial(outer, p2=None)

如果您只想确保在参数从外部传递到内部时存在 p2:

 def outer(p1, *a, **k):
     if 'p2' not in k: k.update(p2 = None)
     inner(*a, **k)

对于更通用的方法,您可以保留默认值字典并在需要时应用它们:

def outer (p1, *args, **kwargs):
    defaults = {'a': 1, 'b':2}
    for k, v in defaults.items():
        if k not in kwargs: kwargs[k] = v
    inner(*a, **k)

如果是这种情况,您可能希望将帖子的标题编辑为"如何在**kwargs参数中包含默认值",因为包装并不是语法的一部分

最新更新