gpt4 book ai didi

python - 为什么 "not"运算符比 python 中的常规条件更快?

转载 作者:行者123 更新时间:2023-12-02 02:30:29 24 4
gpt4 key购买 nike

我正在阅读一篇关于列表推导式的文章,其中提到列表推导式比常规循环和嵌套 for 循环更快。在阅读那篇文章时,它提到了这个声明

  if expression % 2 == 0:

慢于

  if not expression % 2:

谁能解释一下这背后的原因吗?即使我正在解决树问题,并且在递归中我使用的是非根类型的参数。因此,如果有人能提供帮助,我将不胜感激。

文章链接:https://switowski.com/blog/for-loop-vs-list-comprehension这是简短的实现,感谢@Ted

>>> MILLION_NUMBERS = list(range(1_000_000))
>>> def for_loop():
... output = []
... for element in MILLION_NUMBERS:
... if not element % 2:
... output.append(element)
... return output
...
>>> def for_loop2():
... output = []
... for element in MILLION_NUMBERS:
... if element % 2 == 0:
... output.append(element)
... return output
...
>>> timeit.timeit(stmt=for_loop, number=100)
6.254316797000001
>>> timeit.timeit(stmt=for_loop2, number=100)
7.362754617999997

提前致谢。

最佳答案

如果您在这两种情况下使用反汇编程序,您会发现:

if expression % 2 == 0:


2 0 LOAD_FAST 0 (x)
2 LOAD_CONST 1 (2)
4 BINARY_MODULO
6 LOAD_CONST 2 (0)
8 COMPARE_OP 2 (==)
10 POP_JUMP_IF_FALSE 20

if not expression % 2:

2           0 LOAD_FAST                0 (x)
2 LOAD_CONST 1 (2)
4 BINARY_MODULO
6 POP_JUMP_IF_TRUE 16

上面的示例还需要执行两次操作来确定该值是否为零。这大概就是本书作者所说的基础。实际上,这几乎没有任何区别,并且在不同的 python 实现中可能存在很大差异。您还可以使用timeit模块计时!

>>> timeit.timeit('5 % 2 == 0', number=10**7)
0.47088638799323235
>>> timeit.timeit('not 5 % 2', number=10**7)
0.1560280679987045

这会告诉你第二个几乎比第一个快 3 倍。

关于python - 为什么 "not"运算符比 python 中的常规条件更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65119529/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com