【问题标题】:How to modify the signature of a a function without breaking it in a library如何在不破坏库的情况下修改函数的签名
【发布时间】:2022-01-16 15:50:34
【问题描述】:

我正在建立一个我公司其他人正在使用的库。 该库中的一个函数示例是:

def foo(bar, *baz)

现在,我们想出了一个新的命名可选布尔参数qux,我们希望将其添加到foo。 我试图在最后添加它:

def foo(bar, *baz, qux=False)

但这不起作用,因为它是无效的语法(我的 IDE 甚至突出显示了这一点:* 参数后的常规参数)。 在*baz 之前添加它可以正常工作:

def foo(bar, qux=False, *baz)

但这不是向后兼容的,它会破坏每个更新此库的开发人员的所有代码。

如何将这个新参数添加到我的函数中,而不会破坏我所有同事的应用程序?

他们都需要修改他们的代码来接受这个新功能吗?

【问题讨论】:

    标签: python shared-libraries libraries


    【解决方案1】:

    *baz 是一个包罗万象的参数,您不能在此之后添加新的命名参数。作为一种解决方法,您可以执行以下操作:

    def foo(bar, *baz, **kwargs):
        qux = kwargs.get("qux", False)
        # ... rest of your implementation
    

    虽然这不会帮助您的 IDE 捕获调用此函数的错误,但您不必到处修改它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-21
      • 2014-07-29
      • 1970-01-01
      • 2015-01-03
      • 2019-02-28
      • 2011-01-07
      • 1970-01-01
      • 2016-10-29
      相关资源
      最近更新 更多