测试与 None 相等¶
ID: py/test-equals-none
Kind: problem
Security severity:
Severity: recommendation
Precision: very-high
Tags:
- efficiency
- maintainability
Query suites:
- python-security-and-quality.qls
当您将对象与 None
进行比较时,请使用 is
而不是 ==
。 None
是一个单例对象,使用 ==
进行比较会调用所讨论对象的 __eq__
方法,这可能比身份比较慢。使用 is
运算符将 None
与 None
进行比较,对于其他程序员来说也更容易阅读。
建议¶
将 ==
替换为 is
。
示例¶
filter2
函数可能比 filter1
函数效率更高,因为它使用的是身份比较。
def filter1(function, iterable=None)
if iterable == None: # Comparison using '__eq__'
return [item for item in iterable if item]
else:
return [item for item in iterable if function(item)]
def filter2(function, iterable=None)
if iterable is None: # Comparison using identity
return [item for item in iterable if item]
else:
return [item for item in iterable if function(item)]