range
是一类不可变的可迭代对象。它们的迭代行为可以类比为list
s:你不能next
直接调用它们;您必须使用iter
.
所以不,range
不是发电机。
你可能会想,“他们为什么不让它直接可迭代”?好吧,range
s 有一些有用的属性是不可能的:
- 它们是不可变的,因此可以用作字典键。
- 它们具有
start
,stop
和step
属性(从 Python 3.3 开始)count
和index
方法,并且它们支持in
,len
和__getitem__
操作。
range
您可以多次迭代相同的内容。
>>> myrange = range(1, 21, 2)
>>> myrange.start
1
>>> myrange.step
2
>>> myrange.index(17)
8
>>> myrange.index(18)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: 18 is not in range
>>> it = iter(myrange)
>>> it
<range_iterator object at 0x7f504a9be960>
>>> next(it)
1
>>> next(it)
3
>>> next(it)
5