Python for循环基础语法与range()函数用法

江屿
江屿
发布时间:2026-10-10 | 3人浏览过
原创

在 Python 中,for 循环本质上是一个“迭代访问器”,负责逐一取出容器或序列中的每一个元素;而 range() 函数则是一个高效的整数序列生成器。理解这两者的核心,在于掌握“变量如何接收当前项”以及“区间如何确定边界与步长”。本文将从基础语句结构切入,结合内存运行机制与实操示例,彻底理清两者的用法。

1. for 循环的核心执行逻辑

与其他基于计数器判断(如 for (int i=0; i<n; i++))的语言不同,Python 的 for 语句不依赖手动维护的索引变量。只要目标对象支持遍历(即可迭代对象,如列表、元组、字符串),for 就会从前到后取出每个元素并赋值给目标变量,直到取尽为止。

其标准语法结构如下:

for 临时变量 in 可迭代序列:
    执行代码块

下面是一个遍历字符串的最小示例:

text = "PYTHON"
for char in text:
    print(char)
示例输出
P
Y
T
H
O
N

在这段执行过程中,不需要预先计算字符串的长度。Python 解释器会在内部维护读取状态,每执行一次循环体,就自动将下一个字符传递给 char。当没有更多元素时,自动退出循环并继续执行后续代码。

Python for循环基础语法与range()函数用法
图 1:Python for 循环逐步推导与判定流程

2. 认识 range() 函数及其参数规则

当我们并不是想遍历现成的数据列表,而是需要让程序“重复执行固定次数”或者“生成一段指定范围的数字”时,就需要用到内置函数 range()。

range() 能够接收最多三个整数参数,形式为 range(start, stop[, step])。理解它最关键的原则是:左闭右开(包含起始值,不包含结束值)。

2.1 单参数模式:range(stop)

只传入一个参数时,Python 默认起始值 start = 0,默认步长 step = 1。生成的区间是 0 到 stop - 1,总计 stop 个数字。

for i in range(4):
    print(i, end=" ")
示例输出
0 1 2 3

2.2 双参数模式:range(start, stop)

传入两个参数时,第一个参数为确切的起点,第二个参数为终点(不含)。步长依旧默认为 1。

for i in range(2, 6):
    print(i, end=" ")
示例输出
2 3 4 5

2.3 三参数模式:range(start, stop, step)

第三个参数用于指定步长(即每次递增或递减的间隔)。如果步长为正数,则数值逐步增加;如果步长为负数,则数值逐步减少。

# 打印 1 到 10 之间的所有奇数
for i in range(1, 10, 2):
    print(i, end=" ")
示例输出
1 3 5 7 9
Python for循环基础语法与range()函数用法
图 2:range() 函数三参数映射与边界排除原理

3. 典型实战场景与组合写法

3.1 反向倒序计数

当需要倒序循环(例如从 5 倒数到 1)时,必须同时满足两个条件:起始值大于结束值,且步长为负数。初学者常犯的错误是忽略了右侧不包含原则。若想包含 1,结束值必须设为 0。

# 倒序输出 5, 4, 3, 2, 1
for i in range(5, 0, -1):
    print(i, end=" ")
示例输出
5 4 3 2 1

3.2 利用 range(len(...)) 按索引遍历与修改

如果直接使用 for item in list,我们只能读取元素,若在循环体内对 item 重新赋值,改变的只是临时变量的指向,并不会修改原列表。若需要根据位置修改列表内容,则可以配合 len() 生成索引序列:

scores = [80, 92, 75, 60]

for i in range(len(scores)):
    # 将每个成绩提升 5 分
    scores[i] += 5

print(scores)
示例输出
[85, 97, 80, 65]

4. 运行机制与核心差异:range 不是真正的列表

很多初学者会直觉地认为 range(1000000) 会在内存中一次性塞满一百万个数字。事实并非如此。在 Python 3 中,range 是一个不可变的序列类型(惰性求值对象)。

无论传入的区间有多大,range 对象占用的内存空间都是固定且极小的。它仅在内部记录起始点、终点和步长,只有在循环迭代“走到这一步”时,才会实时算出当前值并返回。

Python for循环基础语法与range()函数用法
图 3:实体列表与 range 对象的内存行为机制对比

5. 常见易错点与注意事项

避坑要点 1:浮点数限制
range() 的所有参数都必须是整数(int),传入浮点数(如 range(0, 1.5, 0.5))会直接引发 TypeError。若需要生成浮点数序列,可以使用列表推导式配合除法,或引入 numpy.arange()。
避坑要点 2:步长方向与起止边界冲突
当 start < stop 时,步长必须为正;当 start > stop 时,步长必须为负。如果设置了相互矛盾的方向,例如 range(5, 1, 1),Python 不会抛出异常,而是会直接生成一个空序列,导致循环体内代码一次都不执行。
避坑要点 3:在循环中直接修改被遍历的列表长度
如果使用 for item in my_list 并在循环体内部调用 my_list.remove() 或 my_list.append(),会导致迭代游标发生位移错乱,造成漏读元素。若需过滤列表,建议使用列表推导式构建新列表。

6. 知识体系速查总结

为了方便日常编写与核对,下表梳理了 range() 各种调用方式的输出特征:

代码示例 生成序列(等效列表) 循环次数 核心特征
range(5) [0, 1, 2, 3, 4] 5 从 0 开始,终止于 5-1
range(1, 5) [1, 2, 3, 4] 4 自定义起始点,右边界排除
range(0, 10, 3) [0, 3, 6, 9] 4 指定跨度,跳跃提取
range(5, 0, -1) [5, 4, 3, 2, 1] 5 负步长反向递减
range(3, 3) [] 0 起点等于终点,为空序列
Python for循环基础语法与range()函数用法
图 4:for 循环与 range() 适用模式决策总结
相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表