欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【Python】Python中的range你真的了解吗

程序员文章站 2024-03-21 16:45:34
...

Python中的range你真的了解吗

链接:
range的官方文档
为什么range不是迭代器?range到底是什么类型?

在看了诸多博文之后,终于对range这个神奇的物种有了初步了解,其具有以下特点:

  • range是一种基本类型。官方文档指出:python中有三种基本的序列类型:列表、元组和范围(range)对象
  • range 是可迭代对象而不是迭代器
  • range对象的值不可改变

接下来探索以下range具体迭代用法。


"""生成一个range类型的可迭代对象:"""
>>> a = range(3)

>>> type(a)
range

"""可以看到a的类型是range,有点懵,看下帮助文档"""
>>> print(a.__doc__)

range(stop) -> range object  
range(start, stop[, step]) -> range object  

Return an object that produces a sequence of integers from start (inclusive) to stop (exclusive) by step.  range(i, j) produces i, i+1, i+2, ..., j-1. 
start defaults to 0, and stop is omitted!  range(4) produces 0, 1, 2, 3. 
These are exactly the valid indices for a list of 4 elements. 
When step is given, it specifies the increment (or decrement).
"""文档介绍了一下range的用法,并没有细说"""


"""接着在PyCharm里用`.`的方法可以看到,a具有方法:start,stop,step""
>>> a.start
0
>>> a.stop
3
>>> a.step
1

"""
接着对a进行迭代
因为a是可迭代对象,需要使用iter()函数将a转为迭代器,接着使用next()方法进行迭代取值
"""

>>> b = iter(a)   

 """现在b终于是range可迭代对象了,现在用type查看一下:"""
 
>>> type(b)
range_iterator

"""迭代"""

>>> next(b)
0

>>> next(b)
1

>>> next(b)
2

>>> next(b)

StopIteration    Traceback (most recent call last)
<ipython-input-57-adb3e17b0219> in <module>()
----> 1 next(b)

到这里报错,因为迭代已经结束

实际调试过程图:
【Python】Python中的range你真的了解吗