您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python如果不是== vs如果!=

Python如果不是== vs如果!=

使用dis一下两个版本生成的字节码:

  4           0 LOAD_FAST                0 (foo)
              3 LOAD_FAST                1 (bar)
              6 COMPARE_OP               2 (==)
              9 UNARY_NOT           
             10 RETURN_VALUE

  4           0 LOAD_FAST                0 (foo)
              3 LOAD_FAST                1 (bar)
              6 COMPARE_OP               3 (!=)
              9 RETURN_VALUE

后者的操作较少,因此效率可能会略高一些。

在致谢中指出了),您所进行的操作iffoo != barif not foo == bar操作数量完全相同,只是COMPARE_OP更改并POP_JUMP_IF_TRUE切换为POP_JUMP_IF_FALSE

  2           0 LOAD_FAST                0 (foo)
              3 LOAD_FAST                1 (bar)
              6 COMPARE_OP               2 (==)
              9 POP_JUMP_IF_TRUE        16

  2           0 LOAD_FAST                0 (foo)
              3 LOAD_FAST                1 (bar)
              6 COMPARE_OP               3 (!=)
              9 POP_JUMP_IF_FALSE       16

在这种情况下,除非每次比较所需的工作量有所不同,否则您根本看不到任何性能差异。

但是,请注意,这两个版本 ,因为这将取决于实现方式__eq____ne__有问题的对象。根据数据模型文档

比较运算符之间没有隐含的关系。的真相x==y并不意味着那x!=y错误的。

例如:

>>> class Dummy(object):
    def __eq__(self, other):
        return True
    def __ne__(self, other):
        return True


>>> not Dummy() == Dummy()
False
>>> Dummy() != Dummy()
True

最后,也许是最重要的一点:通常,两者 逻辑上相同, 。

python 2022/1/1 18:45:54 有310人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶