“你用过Python的range()函数吗?” “当然用过啊,不就是for i in range(10)嘛!”“那你知道range(10, -5, -2)会输出什么吗?”如果你的回答是“不知道”或“不确定”,那这篇文章就是为你准备的!range()是Python中最基础、最常用的函数之一,但它的隐藏技巧和深度用法,可能远超你的想象。
第一部分:基础用法(快速回顾)
1. 基本语法
range()函数用于生成一个整数序列,常用于for循环中。
foriinrange(5):
print(i) # 输出:0, 1, 2, 3, 4
2. 三个参数的含义
start(起始值,可选,默认为0)
stop(结束值,不包含)
step(步长,可选,默认为1)
foriinrange(2, 10, 2):
print(i) # 输出:2, 4, 6, 8
3. 逆序输出
通过调整步长,可以轻松实现逆序:
foriinrange(5, 0, -1):
print(i) # 输出:5, 4, 3, 2, 1
第二部分:你可能不知道的冷知识
1. range()不是列表,而是一个“懒惰”的生成器
很多人误以为range()返回一个列表,但实际上它返回的是一个“range对象”,只有在需要时才生成数值,节省内存。
r=range(1000000) # 不会占用大量内存
print(r) # 输出:range(0, 1000000)
2. 可以直接用
in判断是否在范围内
if5inrange(10):
print("5在范围内!") # 输出:5在范围内!
3. 负数步长的陷阱
如果你尝试用负数步长但没有正确设置起始和结束值,可能会得到一个空序列:
foriinrange(0, 5, -1):
print(i) # 什么都不会输出!
第三部分:实战技巧
1. 生成列表
虽然range()本身不是列表,但可以轻松转换为列表:
numbers=list(range(1, 6)) # [1, 2, 3, 4, 5]
2. 结合enumerate()生成索引
在遍历列表时,如果需要索引,可以这样用:
fruits= ["苹果", "香蕉", "橙子"]
foridx, fruitinenumerate(fruits, start=1): # start参数可以设置起始索引
print(f"第{idx}个水果是{fruit}")
3. 实现自定义步长的循环
比如每隔3个元素处理一次:
data= [1, 2, 3, 4, 5, 6, 7, 8, 9]
foriinrange(0, len(data), 3):
print(data[i:i+3]) # 输出:[1,2,3], [4,5,6], [7,8,9]
第四部分:常见误区与解答
1. range()
和xrange()的区别?(Python 2)
在Python 2中,range()返回列表,而xrange()返回生成器(类似Python 3的range())。但在Python 3中,xrange()已被移除,range()直接优化为生成器。
2. 为什么range()的结束值不包含?
这是编程中的常见设计(如切片、数组索引),遵循“左闭右开”原则,避免边界混淆。
3. range()能用于浮点数吗?
不能!range()只支持整数,如果要用浮点数,可以用numpy.arange()或列表推导式:
[0.1*iforiinrange(10)] # [0.0, 0.1, 0.2, ..., 0.9]
现在,你知道range(10, -5, -2)会输出什么了吗?欢迎在评论区留下你的答案! 如果你觉得这篇文章有用,点赞+转发,让更多人告别
range()的误区!
对Python,AI,自动化办公提效,副业发展等感兴趣的伙伴们,扫码添加逍遥,限免交流群
备注【成长交流】