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

📅  最后修改于: 2022-05-13 01:55:19.485000             🧑  作者: Mango

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