Python| range() 不返回迭代器
range() : Python range函数生成一个数字列表,这些数字通常在许多情况下用于迭代,如 for 循环或许多其他情况。在Python中,范围对象不是迭代器。 range 是不可变对象列表的一类。 range 的迭代行为类似于 list 在 list 和 range 中的迭代行为,我们不能直接调用 next函数。如果我们使用 iter 获得迭代器,我们可以调用 next。
# Python program to understand range
# this creates a list of 0 to 5
# integers
demo = range(6)
# print the demo
print(demo)
# it will generate error
print(next(demo))
输出 :
range(0, 6)
运行时错误:
Traceback (most recent call last):
File "/home/6881218331a293819d2a4c16029084f9.py", line 13, in
print(next(demo))
TypeError: list object is not an iterator
注意:以上运行时错误清楚地表明Python range 不是迭代器。
因为range 是可迭代的,所以我们可以在它们的帮助下得到一个迭代器,但我们不能直接在 next 中调用 next。下面的例子清楚地解释了它
# Python program to understand range
# creates an iterator
demo = iter(range(6))
# print iterator
print(demo)
# use next
print(next(demo))
输出 :
0
range 不会在我们创建它时生成它包含的所有数字。它只给出我们使用循环获得的那些数字。 range 具有以下属性。
- range 对象是不可变的,这意味着它们不能再次更改,因此它们可以用作字典中的索引。
- 他们有 start stop 和 step 参数。
- 可以一次又一次地访问相同的范围
例子
# Python program to understand range
# creates a demo range
demo = range(1, 31, 2)
# print the range
print(demo)
# print the start of range
print(demo.start)
# print step of range
print(demo.step)
# print the index of element 23
print(demo.index(23))
# since 30 is not present it will give error
print(demo.index(30))
输出 :
range(1, 31, 2)
1
2
11
运行时错误:由于元素 30 不存在,因此会出现错误
Traceback (most recent call last):
File "/home/cddaae6552d1d9288d7c5ab503c54642.py", line 19, in
print(demo.index(30))
ValueError: 30 is not in range