前几天我在做一些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)#<-
12负载常数1(100000000)#<-
15比较0(<;)<-
18如果错误则跳转14(到35)<-
21件流行上衣<-
3 22加载名称0(i)#<-
25荷载常数2(1)#<-
28就地添加<-
29门店名称0(i)#<-
32跳跃绝对9#<-
&燃气轮机&燃气轮机;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)#<-
2 22跳跃式绝对16#<-
&燃气轮机&燃气轮机;25波普卢街区
&燃气轮机&燃气轮机;26负载常数2(无)
29返回值
循环体有3个op
运行C代码的时间比intepretor短得多,可以忽略