Python 之range 和 xrange

我目前使用的版本是2.7.6函數

>>> help (range)
Help on built-in function range in module __builtin__:oop

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.ui

從上文得知,range是內建函數,range(stop) 或range(start, stop[, step]) 返回的都是列表的拷貝,當列表的長度很大的時候無疑會佔用很大的內存,所以,有了另外一個類xrange:this

>>> help(xrange)
Help on class xrange in module __builtin__:對象

class xrange(object)
| xrange(stop) -> xrange object
| xrange(start, stop[, step]) -> xrange objectblog

返回的是一個xrange的對象
|
| 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.內存


用法與range相似,可是返回的是一個對象,在循環中,由於不須要拷貝列表,所以,其執行的效率遠遠大與range
| 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 Tci

 

下面作一個測試:element

>>> timeit.timeit('for i in range(1,1000000,1):pass',number=1)
0.11162647766673217
>>> timeit.timeit('for i in xrange(1,1000000,1):pass',number=1)
0.05531848321493271
>>> 

能夠看到xrange的執行效率遠大於range

相關文章
相關標籤/搜索