📜  Python | range()不返回迭代器

📅  最后修改于: 2020-04-07 05:09:40             🧑  作者: Mango

range(): Python的range函数生成一个数字列表,这些数字通常在for循环或许多其他情况下用于迭代。在Python, range对象不是迭代器。range是不可变对象列表的一类。range的迭代行为类似于list和range中list的迭代行为,我们不能直接调用next函数。如果我们得到一个使用iter的迭代器,则可以调用next。

# Python程序,展示range
# 这创建了一个list,从0到5
demo = range(6)
# 打印demo
print(demo)
# 如下将报错
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。下面的例子清楚地说明了这一点

# Python程序,理解range
# 创建迭代器iterator
demo = iter(range(6))
# 打印iterator
print(demo)
# 使用next
print(next(demo))

输出:


0

创建range时,range不会生成它包含的所有数字。它只给出那些我们使用循环得到的数字。range具有以下属性。

  • range对象是不可变的,这意味着它们不能再次更改,因此可以用作字典中的索引。
  • 它们具有start stop和step参数。
  • 同一范围可以一次又一次地访问

例:

# Python程序,理解range
# 创建一个demo的range
demo = range(1, 31, 2)
# 打印range
print(demo)
# 打印起点
print(demo.start)
# 打印步长
print(demo.step)
# 打印index=23的元素
print(demo.index(23))
# index 30不存在,会报错
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