为什么Python中在range()上循环要比使用while循环快?

前几天我在做一些Python基准测试,我发现了一些有趣的东西。下面是两个或多或少做相同事情的循环。循环1的执行时间大约是循环2的两倍

循环1:

int i=0
而我<100000000:
i+=1

循环2:

范围(0100000000)内的n的

:
通过

为什么第一个循环要慢得多?我知道这是一个微不足道的例子,但它激起了我的兴趣。range()函数是否有什么特别之处,使它比以同样的方式递增变量更有效

查看python字节码的反汇编,您可能会得到更具体的想法

使用while循环:

10加载常数0(0)
3商店名称0(i)
2 6设置回路28(至37)
&燃气轮机&燃气轮机;9加载名称0(i)#&lt-
12负载常数1(100000000)#&lt-
15比较0(<)&lt-
18如果错误则跳转14(到35)&lt-
21件流行上衣&lt-
3 22加载名称0(i)#&lt-
25荷载常数2(1)#&lt-
28就地添加&lt-
29门店名称0(i)#&lt-
32跳跃绝对9#&lt-
&燃气轮机&燃气轮机;35件流行上衣
36波普卢街区

环体有10个op

使用范围:

10设置\u循环23(至26)
3加载单元名称0(范围)
6负载常数0(0)
9负载常数1(100000000)
12调用函数2
15获得
&燃气轮机&燃气轮机;第6号国际热核试验堆(至25号)为16号-
19店铺名称1(n)#&lt-
2 22跳跃式绝对16#&lt-
&燃气轮机&燃气轮机;25波普卢街区
&燃气轮机&燃气轮机;26负载常数2(无)
29返回值

循环体有3个op

运行C代码的时间比intepretor短得多,可以忽略

发表评论