Python3 range() 函数用法(超详细)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观

前言

在 Python 编程中,range() 函数是一个高频使用的工具,尤其在循环结构和数值序列生成中扮演关键角色。无论是编程初学者构建基础循环,还是中级开发者处理复杂的数据遍历场景,掌握 range() 函数的用法都是提升代码效率与可读性的核心技能之一。本文将从基础语法到进阶技巧,结合实例与生动比喻,帮助读者系统理解 Python3 中 range() 函数的完整功能与应用场景。


基础语法与核心概念

1.1 基本形式与生成原理

range() 函数的核心功能是生成一个整数序列。其最简单的用法仅需一个参数 stop

range(stop)  

例如:

print(list(range(5)))  

这里 range(5) 会生成从 0 开始5 的前一个数的序列。可以将这一过程想象为“数数”:当你说“数到5”,实际数出的数字是0、1、2、3、4,而5本身不包含在内。


1.2 参数详解:start、stop、step

range() 支持三个参数,语法为 range(start, stop, step),默认值为 start=0step=1

  • start:序列的起始值(包含在内)。
  • stop:序列的终止值(不包含在内)。
  • step:步长,即每次递增的数值。

示例 1:指定起始值与终止值

print(list(range(3, 8)))  

示例 2:使用步长参数

print(list(range(1, 10, 2)))  

1.3 负数与逆序序列

通过调整 step 的符号,可以生成负数序列或逆序序列:

print(list(range(-2, -5, -1)))  

print(list(range(10, 0, -2)))  

常见用法与实战场景

2.1 在循环中遍历元素

range() 最常见的用途是与 for 循环结合,控制循环次数:

for i in range(3):  
    print(f"当前循环次数:{i}")  

2.2 生成数字列表

通过 list() 函数可将 range 对象转换为列表,适用于需要直接操作序列的场景:

numbers = list(range(1, 6))  
print(numbers)  # [1, 2, 3, 4, 5]  

2.3 索引与枚举结合

结合 enumerate() 函数时,range() 可辅助管理索引:

fruits = ["苹果", "香蕉", "橙子"]  
for index in range(len(fruits)):  
    print(f"第 {index+1} 个水果:{fruits[index]}")  

进阶技巧与性能优化

3.1 处理大范围数据的内存效率

range() 的对象本身是一个“惰性序列”,仅存储起始值、终止值和步长,而非实际生成所有数值。这使得处理百万级甚至更大的范围时,仍能保持低内存占用:

large_range = range(1_000_000)  
print(large_range)  # 输出:<range[0, 1000000)>  
print(sys.getsizeof(large_range))  # 输出:48 或其他小数值  

3.2 动态生成序列的技巧

通过变量或表达式动态指定参数:

n = 5  
sequence = range(n, 2*n, 2)  
print(list(sequence))  # [5, 7, 9]  

3.3 逆序与倒序遍历

若需从后往前遍历列表,结合 range() 可高效实现:

my_list = [10, 20, 30, 40]  
for i in range(len(my_list)-1, -1, -1):  
    print(my_list[i])  

常见问题与误区

4.1 为什么 range(5) 不包含 5?

range() 的设计逻辑是“左闭右开”(类似数学中的区间 [start, stop)),这与 Python 中字符串切片 s[0:5] 的行为一致。这种设计便于与索引系统兼容,例如 range(len(sequence)) 可直接用于遍历序列的索引。

4.2 如何生成包含终止值的序列?

可通过调整 stop 参数或 step 的值:

print(list(range(0, 6)))  # [0,1,2,3,4,5]  

4.3 负数步长的注意事项

step 的符号与 startstop 的方向不一致,序列将为空:

print(list(range(5, 10, -1)))  # []  
print(list(range(10, 5, -1)))  # [10,9,8,7,6]  

实战案例:综合应用与扩展

5.1 生成斐波那契数列

利用 range() 控制循环次数,结合列表追加生成斐波那契序列:

def generate_fibonacci(n):  
    fib = [0, 1]  
    for i in range(2, n):  
        next_num = fib[i-1] + fib[i-2]  
        fib.append(next_num)  
    return fib[:n]  

print(generate_fibonacci(10))  

5.2 图形化输出

结合循环与 range() 生成简单图形:

for i in range(5, 0, -1):  
    print('*' * i)  

5.3 数据处理场景

在数据遍历中筛选特定条件:

numbers = [15, 23, 7, 42, 8, 30]  
for index in range(len(numbers)):  
    if numbers[index] % 3 == 0:  
        print(f"索引 {index} 的值 {numbers[index]} 可被3整除")  

结论

Python3 range() 函数用法 是编程中不可或缺的基础工具,其灵活性与高效性使其适用于从简单循环到复杂数据处理的各类场景。通过理解参数逻辑、掌握逆序与动态参数技巧,开发者能够显著提升代码的简洁性和性能。建议读者通过实际编码练习逐步内化这些知识,例如尝试用 range() 实现阶乘计算、矩阵索引或自定义序列生成等任务。掌握这一函数后,您将更从容地应对 Python 中的循环控制与数值操作需求。

(全文约 1800 字)

最新发布