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 != bar
与if 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
最后,也许是最重要的一点:通常,两者 在 逻辑上相同, 。