繁体   English   中英

如何找出在python中传递的两个参数?

[英]How to find out which parameter out of two was passed in python?

假设我们要在函数中添加对新参数名称的支持,而不删除旧参数名称(而是为此添加弃用警告)

def f(a=2, b=2):
    # we want users to use b, so need to pass deprecation 
    # warning for a when a is used.
    if(b is 2 and a is not 2): # a is used
        warnings.warn("a is deprecated in future update. Please use b")
        # But we miss case when a=2 is passed

请建议什么是更好的方式来获得此功能。 谢谢 :)

使用None作为默认值a 如果None是用户可能传入的有效值,请使用只有您有权访问的唯一对象:

missing = object()

def f(a=missing, b=2):
    if a is not missing:
        # etc.

一般来说,这段代码有气味......可能有更好的方法来设计你的API,这样你就不会有这个问题。

a = None

def f(a=None, b=None):
    if a is not None:
        warnings.warn("a is deprecated in future update. Please use b")

顺便说一句,python2有一个内置的DeprecationWarning和一个PendingDeprecationWarning 去看一下。

def f(a=None, b=None):
    if a is not None:
        raise PendingDeprecationWarning('a is deprecated in future update. Please use b')

值得注意的是,PendingDeprecationWarning不会像正常异常一样停止执行。 这是提出异常的结果:

PendingDeprecationWarning('a is deprecated in future update. Please use b',)

您可以将kwargs传递给函数,如下所示:

def f(**kwargs):
    a = kwargs.get('a', 2)
    if 'a' in kwargs:
        print('Deprecation warning')
    b = kwargs.get('b', 2)

甚至:

def f(b=2, **kwargs):
    a = kwargs.get('a', 2)
    if 'a' in kwargs:
        print('Deprecation warning')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM