为了账号安全,请及时绑定邮箱和手机立即绑定

xrange是什么意思?

L = xrange(1, 101)
print sum([i*i for i in L])

这两句怎么理解?

正在回答

2 回答

这个 range 和 xrange 是Python 2.x 中特有的一种东西,

先说 range: 在Python 2.x 中 range() 函数 会返回一个 列表, 这样的话有一个缺点就是,当我们给range() 函数传一个很大的参数时, 会返回一个很大的列表,这样会消耗很大的内存,另外也降低了程序运行速度。

再来说 xrange: 在Python 2.x 中 xrange() 函数虽然用法和range()函数一样, 但是它 返回的不是一个列表, 而是一个 xrange 对象, 这个对象其实就是一个 可迭代的生成器。 这样说可能有点费解, 我们可以简单的理解为, 调用xrange() 函数 不占用很大的内存, 但是它又能完成 range 在Python 中的 循环迭代工作。


题主也看出来了, 我在上面回答中,一直在强调 Python 2.x , 这是因为 在Python 3.x 中, 取消了 xrange() 函数,并且对range() 函数进行了升级, 在Python3.x 中 range () 具有了 Python 2.x 中 xrange() 的各种先进特性。 这也能看出来  Python 3.x 对于Python 2.x 的升级优化。

1 回复 有任何疑惑可以回复我~

这两个基本上都是在循环的时候用。
[python] view plaincopy
In [1]: for i in range(0,10):  
  ...:     print i  
  ...:      
0  
1  
2  
3  
4  
5  
6  
7  
8  
9  
 
In [2]: for i in xrange(0,10):  
   print i  
  ...:      
0  
1  
2  
3  
4  
5  
6  
7  
8  
9  
这两个输出的结果都是一样的,实际上有很多不同,range会直接生成一个list对象:
而xrange则不会直接生成一个list,而是每次调用返回其中的一个值【xrange返回的是一个生成器】。
[python] view plaincopy
In [3]: a=range(0,100)  
 
In [4]: type(a)  
Out[4]: list  
 
In [5]: a=xrange(0,100)  
 
In [6]: type(a)  
Out[6]: xrange  
 
In [7]: print a[0],a[1]  
0 1  
所以xrange做循环的性能比range好,尤其是返回很大的时候!
尽量用xrange吧,除非你是要返回一个列表。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
初识Python
  • 参与学习       758623    人
  • 解答问题       8667    个

学python入门视频教程,让你快速入门并能编写简单的Python程序

进入课程

xrange是什么意思?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信