irange()
返回一个生成器类型,其中只能迭代。没有其他的。一旦迭代它,生成器就会耗尽并且无法再次迭代。
蟒蛇2xrange() type https://docs.python.org/2/library/stdtypes.html#sequence-types-str-unicode-list-tuple-bytearray-buffer-xrange和Python 3range() type https://docs.python.org/3/library/stdtypes.html#ranges are 序列类型,它们支持其他序列也支持的各种操作,例如报告其长度、包含测试和索引:
>>> xr = xrange(10, 20, 3)
>>> len(xr)
4
>>> 10 in xr
True
>>> xr[0]
10
>>> xr[1]
13
您可以多次迭代这些对象:
>>> for i in xr:
... print i,
...
10 13 16 19
>>> for i in xr:
... print i,
...
10 13 16 19
您甚至可以使用reversed()功能 https://docs.python.org/2/library/functions.html#reversed迭代它们相反, 有效率的:
>>> for i in reversed(xr):
... print i,
...
19 16 13 10
蟒蛇3range()
类型是一个改进版本xrange()
,因为它支持更多的序列操作,效率更高,并且可以处理超出范围的值sys.maxint
(什么是long
Python 中的整数 2)。
例如,它支持切片,这会导致new range()
切片值的对象:
>>> r = range(10, 20, 3)
>>> r[:2]
range(10, 16, 3)
您可以像使用其他 Python 序列一样使用负索引来获取从末尾开始计数的元素:
>>> r[-2]
16
>>> r[-2:]
range(16, 22, 3)
并且该类型支持相等性测试;二range()
如果实例产生相同的值,则它们是相等的:
>>> range(10, 20, 3) == range(10, 21, 3)
True
在Python 2中,生成器的唯一优势irange()
可能有的是它不受非长整数的限制xrange()
受到:
>>> import sys
>>> xrange(sys.maxint)
xrange(9223372036854775807)
>>> xrange(sys.maxint + 1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OverflowError: Python int too large to convert to C long