一、前言
在 Python 编程中,range() 函数是一个非常常用且实用的内置函数,它用于生成一个整数序列,常用于 for 循环中控制循环次数。虽然看起来简单,但 range() 的灵活性和高效性让它成为 Python 开发者不可或缺的工具之一。
本文将带你全面了解:
range()函数的基本语法;- 它在不同场景下的使用方式;
- 常见误区与最佳实践;
- 结合
for循环、列表推导式等高级用法;
无论你是刚入门的新手,还是希望提升编程技巧的老手,这篇文章都将为你提供实用的知识点!
二、什么是 range()?
range()是 Python 内置函数,用于生成一个不可变的整数序列。
这个序列是“惰性”的,也就是说它不会一次性把所有数字都生成出来,而是在需要时才逐个生成,因此内存效率很高。
✅ 语法格式:
range(stop)
range(start, stop[, step])
参数说明:
| 参数 | 描述 |
|---|---|
start | 起始值(包含)默认为 0 |
stop | 结束值(不包含)必须有 |
step | 步长(每次增加/减少的值),可选,默认为 1 |
📌 注意:range() 返回的是一个 range 类型对象,不是列表,如果需要列表可以使用 list(range(...)) 转换。
三、基本用法示例
示例 1:只传 stop 参数
for i in range(5):
print(i)
输出:
0
1
2
3
4
📌 从 0 开始,到 5(不包含)结束。
示例 2:传入 start 和 stop
for i in range(2, 6):
print(i)
输出:
2
3
4
5
📌 从 2 开始,到 6(不包含)结束。
示例 3:传入 start, stop, step
for i in range(1, 10, 2):
print(i)
输出:
1
3
5
7
9
📌 每次加 2,即步长为 2。
示例 4:负数步长(倒序)
for i in range(10, 0, -1):
print(i)
输出:
10
9
8
7
6
5
4
3
2
1
📌 可以用于倒序遍历。
四、常见应用场景
✅ 1. 控制 for 循环次数
for i in range(3):
print("Hello World!")
📌 输出三次 "Hello World!"。
✅ 2. 遍历索引
fruits = ['apple', 'banana', 'cherry']
for i in range(len(fruits)):
print(f"第 {i} 个水果是:{fruits[i]}")
📌 适用于需要同时访问索引和元素的情况。
✅ 3. 创建列表(结合列表推导式)
squares = [x**2 for x in range(1, 6)]
print(squares) # 输出 [1, 4, 9, 16, 25]
📌 简洁高效地创建数据结构。
✅ 4. 分段处理数据
data = list(range(1, 21))
for i in range(0, len(data), 5):
print(data[i:i+5])
📌 将数据分批次处理,如每 5 个一组。
✅ 5. 与 enumerate() 配合使用
words = ["cat", "window", "defenestrate"]
for index, word in enumerate(words):
print(f"第 {index} 个单词是:{word}")
📌 同时获取索引和值。
五、注意事项与常见错误
❗ 错误示例 1:试图修改 range() 对象
r = range(5)
r[0] = 10 # 报错:TypeError: 'range' object does not support item assignment
📌 range() 是不可变序列,不能修改其中的元素。
❗ 错误示例 2:直接打印 range() 对象
print(range(5)) # 输出:range(0, 5)
📌 不会自动展开成列表,需要用 list() 转换。
❗ 错误示例 3:步长为 0
range(1, 5, 0) # 报错:ValueError: range() arg 3 must not be zero
📌 步长不能为 0,否则会导致死循环。
✅ 推荐写法:转换为列表查看内容
print(list(range(5))) # 输出 [0, 1, 2, 3, 4]
六、range() 与 xrange() 的区别(Python 2 vs Python 3)
| 特性 | Python 2 (xrange) | Python 3 (range) |
|---|---|---|
| 是否返回列表 | ❌ 否 | ❌ 否 |
| 是否支持切片 | ❌ 否 | ❌ 否 |
| 是否占用大量内存 | ✅ 否 | ✅ 否 |
是否有 __contains__ 方法 | ✅ 是 | ✅ 是 |
| 是否兼容 Python 3 | ❌ 否 | ✅ 是 |
📌 在 Python 3 中,xrange() 已被移除,统一使用 range(),其行为类似于 Python 2 的 xrange()。
七、总结对比表
| 使用方式 | 是否合法 | 是否推荐 | 适用场景 |
|---|---|---|---|
range(5) | ✅ 是 | ✅ 推荐 | 默认从 0 开始 |
range(2, 6) | ✅ 是 | ✅ 推荐 | 自定义起始 |
range(1, 10, 2) | ✅ 是 | ✅ 推荐 | 自定义步长 |
range(10, 0, -1) | ✅ 是 | ✅ 推荐 | 倒序 |
range(len(seq)) | ✅ 是 | ✅ 推荐 | 遍历索引 |
range(1, 5, 0) | ❌ 否 | ❌ 不推荐 | 步长不能为 0 |
八、结语
感谢您的阅读!如果你有任何疑问或想要分享的经验,请在评论区留言交流!