range()是Python生成整数序列的内置函数,返回range对象而非列表,支持三种调用形式:range(stop)、range(start, stop)、range(start, stop, step),常用于for循环控制次数或索引遍历,需注意stop不包含、step不能为0等细节。

range() 是 Python 中生成整数序列的内置函数,常配合 for 循环 使用,用来控制循环次数或遍历索引。它不直接生成列表(Python 3 中返回的是 range 对象),内存友好、效率高。
基本语法与三种写法
range() 有三种常用调用形式:
-
range(stop):从 0 开始,到 stop-1 结束(不包含 stop),步长为 1。例如
range(5)生成 0, 1, 2, 3, 4。 -
range(start, stop):从 start 开始,到 stop-1 结束,步长为 1。例如
range(2, 7)生成 2, 3, 4, 5, 6。 -
range(start, stop, step):指定起始、结束和步长(可正可负)。例如
range(0, 10, 2)生成 0, 2, 4, 6, 8;range(5, 0, -1)生成 5, 4, 3, 2, 1。
for 循环中常见用法
range() 最典型用途是控制循环执行次数,或按索引访问序列元素:
- 重复执行某段代码 n 次:
for i in range(3): print("Hello")输出 3 次。 - 遍历字符串/列表的索引:
text = "abc"; for i in range(len(text)): print(i, text[i])输出索引和对应字符。 - 反向遍历:
for i in range(len(lst)-1, -1, -1): print(lst[i])从末尾向前取元素。
注意细节和易错点
使用 range() 配合 for 循环时,这些细节容易被忽略:
立即学习“Python免费学习笔记(深入)”;
- range 的 stop 值永远不包含在序列中,类似切片规则。
- step 为 0 会报
ValueError;step 为负时,start 必须大于 stop,否则得不到任何值。 - range 对象支持
in、len()、索引(如range(5)[2]),但不是列表,不能直接修改或追加。 - 若需真正列表,得显式转换:
list(range(3))→[0, 1, 2]。
替代方案与何时不用 range
不是所有循环都需要 range():
- 直接遍历元素更简洁:
for item in my_list:比for i in range(len(my_list)):更 Pythonic。 - 需要索引和元素时,优先用
enumerate():for i, item in enumerate(my_list):。 - 处理非整数步进(如小数)、无限序列等场景,range 不适用,可考虑
itertools.count()或生成器。
基本上就这些。掌握 range 的三种形式和边界行为,for 循环里的计数和索引操作就很少出错了。










