对于int来说,比0更快!= 0?

Eal*_*had 0 python performance operators python-3.x

哪种测试更快:平等还是不平等?

例如,在一个大while循环中,条件是否应该a>0而不是a!=0

Mar*_*ers 8

当问自己一个关于不同操作员之间速度差异的问题时,请使用该timeit模块进行测量.他们同样快:

>>> import timeit
>>> timeit.timeit('a > 0', 'a = 1', number=10**7)
0.2486400604248047
>>> timeit.timeit('a > 0', 'a = 0', number=10**7)
0.2411360740661621
>>> timeit.timeit('a != 0', 'a = 1', number=10**7)
0.24765801429748535
>>> timeit.timeit('a != 0', 'a = 0', number=10**7)
0.24990510940551758
Run Code Online (Sandbox Code Playgroud)

这是比较重复1000万次,如果你重新运行上述测试,你会发现时间可能会有所不同,没有一个是明显的赢家.

你应该专注于这里的可读性,而不是速度.简单的整数比较将成为整体执行速度的无限小部分,即使在循环中也是如此.


pok*_*oke 5

如果我们谈论的a是一个int在这个非常时刻,然后我的机器上,一个平等的检查是非常轻微比大于检查速度更快.您可以使用该timeit模块快速检查自己:

>>> for s in 'a = 2', 'a = 0', 'a = -2':
        timeit('a != 0', s)
        timeit('a > 0', s)

0.06030992519848155
0.06666935212976455
0.053299842422489974
0.06516424110179742
0.05866621696540619
0.06685335186756447
Run Code Online (Sandbox Code Playgroud)

但是,这些数字与另一个数字非常接近.所以你应该从这个答案中拿出一件事:没关系.

这些东西都是微观优化.微优化很少对应用程序的实际性能产生任何影响.应用程序中有数千个其他部分更有可能对性能产生更大影响,使这种差异可以忽略不计.如果您实际分析了应用程序并确认代码的这一部分是导致应用程序性能下降的瓶颈,那么您应该只关心这些事情.但对于这个特殊的代码,我怀疑情况会是如此.

所以,请不要理会这些微小的差异,而只是使用更有意义的东西:考虑到这两个检查具有不同的语义含义(数字不等于零,或数字大于零),选择一个你真的打算检查一下.