Python range() 函数

Python range() 函数中文讲解(2025年)

range() 是 Python 的内置函数,用于生成一个整数序列,常用于循环、列表生成和索引操作。相比其他语言的循环计数(如 C 的 for 循环),range() 更简洁且灵活,广泛应用于 Python 脚本、数据处理和算法开发。2025年,range() 仍是 Python 核心功能,尤其在 Python 3.12/3.13 中因性能优化(如 JIT 编译)更高效。本教程详细讲解 range() 的语法、用法和实践,基于 Python 官方文档、CSDN 和 Python 社区,适合初学者和开发者。建议在 Python 3.9+(推荐 3.12/3.13)环境中用 PyCharm 或 VS Code 练习。


一、range() 函数概览(必知)

  • 定义range() 生成一个不可变整数序列(range 对象),用于迭代或转换为列表、元组等。
  • 核心用途
  • 控制 for 循环的迭代次数。
  • 生成有序整数序列(如索引、编号)。
  • 配合列表推导式或算法处理数据。
  • 特点
  • 高效range 对象延迟计算,节省内存。
  • 灵活:支持正向、反向和步长设置。
  • 不可变range 对象不可修改,线程安全。
  • 2025年趋势
  • Python 3.13 优化 range 的内存占用和迭代性能。
  • 在数据科学中,range() 常结合 numpypandas 处理大数据。
  • 在 KMP(Kotlin Multiplatform)项目中,range() 用于 Python 模块的循环逻辑。

二、核心语法与用法(必会)

函数原型

range(start, stop[, step])
  • 参数
  • start(可选):起始值(包含),默认 0。
  • stop(必填):结束值(不包含)。
  • step(可选):步长(递增/递减量),默认 1。
  • 返回值range 对象(可迭代,需通过 list() 或循环访问)。
  • 注意
  • 所有参数必须是整数(int)。
  • stop 是唯一必填参数。

以下按用法讲解,包含示例代码,可直接运行。

1. 基本用法
  • 单参数(range(stop)
  for i in range(5):
      print(i, end=" ")  # 输出:0 1 2 3 4
  • 说明:从 0 到 4(不包含 5),步长为 1。
  • 双参数(range(start, stop)
  for i in range(2, 7):
      print(i, end=" ")  # 输出:2 3 4 5 6
  • 说明:从 2 到 6(不包含 7)。
  • 三参数(range(start, stop, step)
  for i in range(1, 10, 2):
      print(i, end=" ")  # 输出:1 3 5 7 9
  • 说明:从 1 到 9,步长为 2。
  • 反向序列(负步长)
  for i in range(10, 0, -1):
      print(i, end=" ")  # 输出:10 9 8 7 6 5 4 3 2 1
2. 转换为列表
  • range 转为列表
  numbers = list(range(5))
  print(numbers)  # 输出:[0, 1, 2, 3, 4]
  • 说明list(range()) 显式生成整数列表,但内存占用高于 range 对象。
3. 常用属性
  • 访问 range 属性
  r = range(1, 10, 2)
  print(r.start, r.stop, r.step)  # 输出:1 10 2
  print(len(r))  # 输出:5(序列长度)
  print(5 in r)  # 输出:True(检查元素是否存在)
4. 与循环结合
  • 索引列表
  fruits = ["apple", "banana", "cherry"]
  for i in range(len(fruits)):
      print(f"{i}: {fruits[i]}")
  # 输出:
  # 0: apple
  # 1: banana
  # 2: cherry
  • 列表推导式
  squares = [x**2 for x in range(5)]
  print(squares)  # 输出:[0, 1, 4, 9, 16]
5. 性能优势
  • 内存效率
  import sys
  r = range(1000000)
  l = list(range(1000000))
  print(sys.getsizeof(r))  # 输出:48(字节,range 对象)
  print(sys.getsizeof(l))  # 输出:约 8MB(列表)
  • 说明range 对象延迟生成元素,适合大数据场景。

三、实践示例(综合应用)

  1. 打印九九乘法表
for i in range(1, 10):
    for j in range(1, i + 1):
        print(f"{j}*{i}={i*j}", end="\t")
    print()


输出

   1*1=1
   1*2=2   2*2=4
   1*3=3   2*3=6   3*3=9
   ...

功能:使用嵌套 range 打印九九乘法表。

  1. 生成等差数列
start, stop, step = 0, 20, 5
sequence = list(range(start, stop, step))
print(sequence)  # 输出:[0, 5, 10, 15]


功能:生成等差数列并转为列表。

  1. KMP 集成(Python 循环逻辑)
# 模拟 KMP 项目中 Python 模块的循环处理
def process_data(size):
    data = []
    for i in range(size):
        data.append({"id": i, "value": i * 10})
    return data

# 调用示例
result = process_data(5)
print(result)  # 输出:[{"id": 0, "value": 0}, {"id": 1, "value": 10}, ...]


功能:为 KMP 项目生成结构化数据,供 Kotlin 模块调用。


四、注意事项与最佳实践

  1. 参数限制
  • 确保 startstopstep 为整数:
    python # 错误 range(1.5, 5.5) # TypeError: 'float' object cannot be interpreted as an integer
  • 步长不能为 0:
    python range(1, 5, 0) # ValueError: range() arg 3 must not be zero
  1. 内存优化
  • 优先使用 range 对象,避免不必要的 list(range())
    python # 低效 for i in list(range(1000000)): pass # 高效 for i in range(1000000): pass
  1. 替代方案
  • 数据科学中用 numpy.arange 替代 range
    python import numpy as np print(np.arange(0, 5, 0.5)) # 支持浮点数:[0.0, 0.5, 1.0, ...]
  1. 跨平台
  • 在 KMP 项目中,range() 用于 Python 模块的循环逻辑,与 Kotlin 互操作:
    kotlin @CName("processData") fun processData(size: Int): Array<Data> { // 调用 Python range 生成数据 }
  1. 2025年趋势
  • Python 3.13range 迭代性能优化,适合大数据处理。
  • 数据科学:结合 pandasrange 生成索引:
    python import pandas as pd df = pd.DataFrame({"value": range(5)})
  • AI 辅助:PyCharm 的 Copilot 可生成 range 循环代码。

五、学习建议

  • 练习:用 range() 实现九九乘法表或等差数列,测试正/反向迭代。
  • 资源
  • 官方文档:https://docs.python.org/3/library/stdtypes.html#range
  • CSDN:搜索“Python range”。
  • B站:Python 教程(如“尚硅谷 Python”)。
  • 时间:1-2 小时掌握 range(),1 天熟悉循环和列表推导。
  • 实践:写程序生成序列或处理列表索引。

六、总结

Python range() 函数必知整数序列生成和内存效率,必会循环、列表转换和步长设置。2025年,range() 在 Python 开发和 KMP 项目中不可或缺,结合 Python 3.13 优化更高效。相比 C 的循环,range() 简洁且安全。

如果需要具体场景代码(如复杂算法或 KMP 示例)或有问题,告诉我,我可以提供更详细解答!

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注