先看看在python 2.x中这两个函数的区别:
先看函数range()的官方帮助文档:
$ python
Python 2.6.6 (r266:84292, Aug 18 2016, 15:13:37)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-17)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> help(range)
Help on built-in function range in module __builtin__:
range(...)
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)
从官方帮助文档可以知道:
1,range是内置函数(built-in);
2,接受三个参数start,stop和step,其中start,step可以忽略,stop必须有;
3,函数返回一个整数list (list of integers);
4, range(i, j) returns [i, i+1, i+2, ..., j-1];
5, range(4) returns [0, 1, 2, 3]
再看xrange()的官方帮助文档:
$ python
Python 2.6.6 (r266:84292, Aug 18 2016, 15:13:37)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-17)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> help(xrange)
Help on class xrange in module __builtin__:
class 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)
从官方帮助文档可以知道:
1,xrange也是一个内置函数(built-in);
2,xrange和range参数用法相同;
2,返回的是一个xrange 对象即xrange object, 而range返回list;
3,xrange比range运行的更快,而且更节省内存空间;
结论:
1,xrange和range功能相同
2,xrange和range实现方式不同:
range函数返回一个list
xrange函数返回一个迭代器
3,建议使用xrange,特别是在循环很大的情况下
xrange比range要快,要节省内存,它是如何实现的?
range返回一个list,而xrange返回一个迭代器,
即若循环是100,则range返回一个list,里面有100个整数,
而xrange只有在循环内被调用时才会产生一个整数,所以无论循环多少次,当前只用一个
元素,也就是只用了一个整数的内存空间,所以,在循环很大情况下,xrange的效率和速度比range很明显。
=======================================================
在python 3.x中它们有什么区别呢?
在python 3.x中range函数被删除了,xrange函数被重命名成了range。
所以在python 3.x中range 和 xrange 虽然名字不同,可是最终都是使用的xrange。
先看函数range()的官方帮助文档:
$ python
Python 2.6.6 (r266:84292, Aug 18 2016, 15:13:37)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-17)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> help(range)
Help on built-in function range in module __builtin__:
range(...)
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)
从官方帮助文档可以知道:
1,range是内置函数(built-in);
2,接受三个参数start,stop和step,其中start,step可以忽略,stop必须有;
3,函数返回一个整数list (list of integers);
4, range(i, j) returns [i, i+1, i+2, ..., j-1];
5, range(4) returns [0, 1, 2, 3]
再看xrange()的官方帮助文档:
$ python
Python 2.6.6 (r266:84292, Aug 18 2016, 15:13:37)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-17)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> help(xrange)
Help on class xrange in module __builtin__:
class 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)
从官方帮助文档可以知道:
1,xrange也是一个内置函数(built-in);
2,xrange和range参数用法相同;
2,返回的是一个xrange 对象即xrange object, 而range返回list;
3,xrange比range运行的更快,而且更节省内存空间;
结论:
1,xrange和range功能相同
2,xrange和range实现方式不同:
range函数返回一个list
xrange函数返回一个迭代器
3,建议使用xrange,特别是在循环很大的情况下
xrange比range要快,要节省内存,它是如何实现的?
range返回一个list,而xrange返回一个迭代器,
即若循环是100,则range返回一个list,里面有100个整数,
而xrange只有在循环内被调用时才会产生一个整数,所以无论循环多少次,当前只用一个
元素,也就是只用了一个整数的内存空间,所以,在循环很大情况下,xrange的效率和速度比range很明显。
=======================================================
在python 3.x中它们有什么区别呢?
在python 3.x中range函数被删除了,xrange函数被重命名成了range。
所以在python 3.x中range 和 xrange 虽然名字不同,可是最终都是使用的xrange。