大于0比!0代表整数?

2024-04-19 15:11:40 发布

您现在位置:Python中文网/ 问答频道 /正文

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

例如,在一个大的while循环中,条件应该是a>0而不是{}?在


Tags: 条件while
3条回答

当问自己关于不同运算符之间的速度差的问题时,请使用^{} module测量。它们同样快:

>>> 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

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

你应该关注的是可读性,而不是速度。一个简单的整数比较将是整个执行速度的一个无穷小的部分,即使是在一个循环中。在

对我来说,timeit并没有显示出任何一致的显著差异(假设您使用的是整数)。。。在

>>> timeit.timeit('1 > 0')
0.031796932220458984
>>> timeit.timeit('1 != 0')
0.03249096870422363
>>> timeit.timeit('1 > 0')
0.03250718116760254
>>> timeit.timeit('1 != 0')
0.031616926193237305

正如对这个问题的评论中所说的那样,你不应该把重点放在哪个运算符最快上,而应该把重点放在最有意义的运算符上。如果你真的是说“在a大于0时做这个”的话,那就使用>。做这个比较所花费的时间对整个运行时的贡献很小,所以不必担心哪个操作符更快。。。在

如果我们说aint,那么此时此刻在我的机器上,相等检查比大于检查稍微快一点。您可以使用^{} module快速检查自己:

>>> 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

然而,这些数字非常接近另一个。所以你只需要从这个答案中去掉一件事:这不重要。在

这些都是微优化。微优化很少对应用程序的实际性能产生任何影响。更有可能的是,应用程序中有上千个其他部分对性能有更大的影响,从而使这种差异可以忽略不计。只有当您确实profiled your application并确认这部分代码是降低应用程序性能的瓶颈时,才应该关心这些事情。但对于这个特殊的代码,我怀疑永远不会是这样。在

所以,请不要在意这些细微的差别,只要使用更有意义的东西即可。:考虑到这两个检查具有不同的语义意义(一个数字不等于零,或一个数字大于零),请选择您实际要检查的那个。在

相关问题 更多 >