python range() 和xrange()的区别

Help on built-in function range in module __builtin__:

range(...)
    range(stop) -> list of integers
    range(start, stop[, step]) -> list of integers

    Return a list containing an arithmetic progression of integers.
    range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.
    When step is given, it specifies the increment (or decrement).
    For example, range(4) returns [0, 1, 2, 3].  The end point is omitted!
    These are exactly the valid indices for a list of 4 elements.
(END)

以上是range函数的说明,三个参数,分别代表开始,结束位置和步长。

使用方法如下:

In [2]: range(10)
Out[2]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

In [3]: range(1, 10)
Out[3]: [1, 2, 3, 4, 5, 6, 7, 8, 9]

In [4]: range(1, 10, 2)
Out[4]: [1, 3, 5, 7, 9]

In [5]: type(range(1, 3))
Out[5]: list

In [6]: for i in range(10):
   ...:     print i
   ...:
0
1
2
3
4
5
6
7
8
9

  

而xrange()说明如下:

Help on class xrange in module __builtin__:

class xrange(object)
 |  xrange(stop) -> xrange object
 |  xrange(start, stop[, step]) -> xrange object
 |
 |  Like range(), but instead of returning a list, returns an object that
 |  generates the numbers in the range on demand.  For looping, this is
 |  slightly faster than range() and more memory efficient.
 |
 |  Methods defined here:
 |
 |  __getattribute__(...)
 |      x.__getattribute__(‘name‘) <==> x.name
 |
 |  __getitem__(...)
 |      x.__getitem__(y) <==> x[y]
 |
 |  __iter__(...)
 |      x.__iter__() <==> iter(x)
 |
 |  __len__(...)
 |      x.__len__() <==> len(x)
 |
 |  __reduce__(...)
 |
 |  __repr__(...)
 |      x.__repr__() <==> repr(x)
 |
 |  __reversed__(...)
 |      Returns a reverse iterator.
 |
 |  ----------------------------------------------------------------------
 |  Data and other attributes defined here:
 |
 |  __new__ = <built-in method __new__ of type object>
 |      T.__new__(S, ...) -> a new object with type S, a subtype of T
(END)

说明了两者的区别是xrange返回的是一个可迭代的对象,range返回的则是一个列表. 同时效率更高,更快。

原因是实现的时候使用了yield(唔,源码没看见,具体对比可以看一下http://ju.outofmemory.cn/entry/122781),

因此更节省内存,规模越大区别更明显.

关于可迭代对象的定义见:https://eastlakeside.gitbooks.io/interpy-zh/content/Generators/Iterable.html

即,只要定义了可以返回一个迭代器的__iter__方法,或者__getitem__那么就是可迭代对象。

xrange使用方法如下:

In [13]: list(xrange(3))
Out[13]: [0, 1, 2]

In [14]: a = xrange(3)

In [15]: a.__iter__
Out[15]: <method-wrapper ‘__iter__‘ of xrange object at 0x7f415be1bdc8>

In [16]: a.__iter__()
Out[16]: <rangeiterator at 0x7f415aa27210>

  

 

  

时间: 2024-10-19 08:51:45

python range() 和xrange()的区别的相关文章

python 中range与xrange的区别

先来看看range与xrange的用法介绍 help(range)Help on built-in function range in module __builtin__: range(...) range(stop) -> list of integers range(start, stop[, step]) -> list of integers Return a list containing an arithmetic progression of integers. range(i

[Python]range与xrange用法对比

[整理内容]具体如下: 先来看如下示例:>>>x=xrange(0,8)>>> print xxrange(8)>>>print x[0]0>>>print x[7]7>>>print x[8]Traceback (most recent call last):File "<stdin>", line 1, in <module>IndexError: xrange obj

range和xrange的区别详解

两种用法介绍如下:1.range([start], stop[, step])返回等差数列.构建等差数列,起点是start,终点是stop,但不包含stop,公差是step.start和step是可选项,没给出start时,从0开始:没给出step时,默认公差为1.例如: >>> range(10) #起点是0,终点是10,但是不包括10 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> range(1,10) #起点是1,终点是10,但是不包括10

range与xrange的区别

一.Python中range()与xrange()有什么区别 range([start,] stop[, step]),根据start与stop指定的范围以及step设定的步长,生成一个序列 range(6) #[0, 1, 2, 3, 4, 5] range(1,6) #[1, 2, 3, 4, 5] range(1,6,2) #[1, 3, 5] #也就是说range()返回的是个列表 xrange用法与 range 完全相同,所不同的是生成的不是一个list对象,而是一个生成器 xrang

range()和xrange()的区别

今天写一下关于xrange()和range()的区别. 首先我们看一段代码: class Ce_shi(): def __init__(self,start,end): self.start = start self.end = end def __len__(self): return self.end - self.start def __getitem__(self,index): if index < 0 and index > -(self.end): return self.end

python2中range和xrange的区别

range和xrange用法相同,不同的是xrange不是生成一个序列,而是作为一个生成器,即生成一个取出一个 相对来说,xrange比range性能优化很多,因为不需要一下子开辟一块很大的内存,特别是数据量比较大的时候 注意: xrange和range这两个基本是使用在循环的时候 当需要输出一个列表的时候,就必须要使用range了 原文地址:https://www.cnblogs.com/z-x-y/p/9998672.html

python中range和xrange的区别

1.range生成一个列表:xrange生成一个生成器 2.用法都差不多  

python(47):range和xrange的区别和联系

range 前面小节已经说明了,range([start,] stop[, step]),根据start与stop指定的范围以及step设定的步长,生成一个序列. 比如: >>> range(5)[0, 1, 2, 3, 4]>>> range(1,5)[1, 2, 3, 4]>>> range(0,6,2)[0, 2, 4]xrange 用法与 range 完全相同,所不同的是生成的不是一个list对象,而是一个生成器. >>> x

ZH奶酪:Python中range和xrange的区别

range    函数说明:range([start,] stop[, step]),根据start与stop指定的范围以及step设定的步长,生成一个序列.range示例: >>> range(5) [0, 1, 2, 3, 4] >>> range(1,5) [1, 2, 3, 4] >>> range(0,6,2) [0, 2, 4] xrange    函数说明:用法与range完全相同,所不同的是生成的不是一个数组,而是一个生成器.xrang