栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

使用

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

not ==

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

!=

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

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


在致谢中指出了),您所进行的操作

iffoo != bar
if not foo ==bar
操作数量完全相同,只是
COMPARE_OP
更改并
POP_JUMP_IF_TRUE
切换为
POP_JUMP_IF_FALSE

not ==

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

!=

  20 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

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

x != y
因此可读性比
not x == y



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/639899.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号