CodeQL 文档

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

点击查看 CodeQL 代码库中的查询

当您将对象与 None 进行比较时,请使用 is 而不是 ==None 是一个单例对象,使用 == 进行比较会调用所讨论对象的 __eq__ 方法,这可能比身份比较慢。使用 is 运算符将 NoneNone 进行比较,对于其他程序员来说也更容易阅读。

建议

== 替换为 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)]

参考资料

  • ©GitHub, Inc.
  • 条款
  • 隐私