测试与 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)]