在Python中比较性能:相等与不相等

比较任何变量时,可以选择比较平等与比较不平等。 对于有一个元素的变量,不是字符串/列表/元组/等等,差异可能不存在或可以忽略不计。

问题:比较两个多元变量时,比较它们是否相等比较是否相等比较是否相等。

我的直觉告诉我,比较他们是否不平等应该会更快。 我很好奇,如果有人能告诉我这是否属实,并且这是多种类型的多元素类型。

注意 :我看过,并没有在这里找到任何回复我的问题的帖子。 这可能很明显,但我希望有更多的意见,而不仅仅是我自己的意见。


你总是可以检查:

>>> timeit("{'a': 1, 'b': 2} == {'a': 2, 'b': 1}")
0.29072967777517983
>>> timeit("{'a': 1, 'b': 2} != {'a': 2, 'b': 1}")
0.2906114293159803

差异似乎可以忽略不计...另一个测试案例可能?

>>> timeit("range(30) == range(35)")
0.7179841181163837
>>> timeit("range(30) != range(35)")
0.725536848004765

再次,可以忽略不计。

>>> timeit("a == b", "a = {'a': 1, 'b': 2}; b = {'a': 2, 'b': 1}")
0.06806470555693522
>>> timeit("a != b", "a = {'a': 1, 'b': 2}; b = {'a': 2, 'b': 1}")
0.06724365965146717

并且将对象创建移出。 虽然很小的例子,但我仍然可以想象,当它们变得明显不同时,它们都会在适当的时候使用短路。


我认为它直接与object.__eq__()object.__ne__

当您使用== (等于)或!= (不等于)时,此方法会启动,并且在您要比较的对象的函数中,根据写入方法的不同,该方法可能会更快或更慢。

请参阅官方文档中的Datamodel Basic定制。


我对某些Cortex M3程序集(或者至少我的教授说这就是它)的经验是,当你检查相等或不相等时,有一个比较命令设置3位,一个if语句(如果可以的话)称之为),它看着一个特定的。 基本上,你比较AB ,3比特是更小,等于和更大,然后当你检查任何东西时,它应该检查它是大于还是小于(2检查,所以2个周期)不等于,或者应用不等于等于标志,这取决于体系结构可能是2种不同的行为或单个周期。 因此我推测这取决于编译器,汇编器和CPU的架构。

然而,这应该意味着你可以制作两个程序,每个程序都会进行大量的这种检查,并且执行时间很长,其中巨大的时间会碰到成千上万(根据C / C ++中的执行时间来判断)。 在我看来,这是一个相当可行的任务,可以手动计时,所以你不会混淆定时器,而且由于定时器在许多语言中都具有某些精度,所以它们可能甚至不能捕获单个执行时间声明。 或者你可以计算巨大的循环,看看计算机说什么。

但请记住,如果您在不等于循环中获得1.1倍的时间,这并不意味着不平等需要1.1倍的平均检查时间,因为循环有更大的循环,它可能是时间的两倍。 随着更多的测试每循环更多的检查,应该很容易确定循环花费的时间和花费在检查上的时间。 希望这可以帮助。

链接地址: http://www.djcxy.com/p/10047.html

上一篇: Comparing Performance in Python: equal versus non equal

下一篇: primitive Long values 127 and 128