python2的xrange比range的优点_为什么list(xrange)比range()慢?

我做了几个测试,发现xrange()比range()快得多(这也得到了各种问题/答案的证实):>>> from timeit import timeit

>>> timeit(stmt = 'x = range(1000)', number = 10000)

0.38216601211680734

>>> timeit(stmt = 'x = xrange(1000)', number = 10000)

0.010537726631953959 # xrange is much faster than range

我很好奇,于是我又做了一个测试,看看list(xrange(1000))是否仍然比简单的range(1000)快:

^{pr2}$

更多电话也是如此:>>> timeit(stmt = 'x = range(1000)', number = 100000)

3.6457308233315757

>>> timeit(stmt = 'x = list(xrange(1000))', number = 100000)

5.722031755612818

所以,我的问题是,为什么list(xrange)比range本身慢得多?在

使用dis.dis(),我发现list(xrange)比range执行更多的计算:>>> dis.dis('x = list(xrange(1000))')

0 SETUP_LOOP 15648 (to 15651)

3 SLICE+2

4 IMPORT_NAME 29545 (29545)

7 LOAD_GLOBAL 30760 (30760)

10 POP_JUMP_IF_FALSE 28257

13 BUILD_LIST 10341

16 <49>

17 <48>

18 <48>

19 <48>

20 STORE_SLICE+1

21 STORE_SLICE+1

>>> dis.dis('x = range(1000)')

0 SETUP_LOOP 15648 (to 15651)

3 SLICE+2

4 POP_JUMP_IF_FALSE 28257

7 BUILD_LIST 10341

10 <49>

11 <48>

12 <48>

13 <48>

14 STORE_SLICE+1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值