概述:如果传入的参数只有一个,那么会调用class range(stop)
,如果传入的参数超过一个,那么会调用class range(start, stop[, step])
。
range
生成器的参数必须是integers
(内置的int
类型或者是那些实现了__index__
方法的对象),如果step
参数被省略,那么它的默认值就是1
,如果start
参数被省略,它的默认值会是0
,如果step
是0
的话,会抛出一个ValueError
的异常。
如果step
是一个正数,那么一个range
对象r
的内容取决于r[i] = start + step*i
,其中i >= 0 and r[i] < stop
;代码如下:>>> list(range(0, 30, 5))
[0, 5, 10, 15, 20, 25]
>>> r = range(0, 10)
>>> r[1]
1
>>> type(r)
<class 'range'>
如果step
是一个负数,那么一个range
对象r
的内容仍然取决于r[i] = start + step*i
,其中i >= 0 and r[i] > stop
。>>> list(range(0, -10, -1))
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
如果r[0]
不满足值约束,则range
对象将为空,代码如下。>>> r = range(0)
>>> r[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: range object index out of range
Range
类支持负索引,这种语法被解释为从正索引确定的序列的末尾倒着取值,代码如下:>>> r = range(10)
>>> r[-1]
9
Range
类实现了除连接和重复之外的所有通用序列操作,测试代码如下:
>>> r1 = range(0, 1)
>>> r2 = range(1, 2)
>>> r1 + r2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'range' and 'range'
>>> r = range(5)
>>> r = r * 5
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for *: 'range' and 'int'