[英]How can I find out which digit is different between two numbers in 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.