百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Python必会的20核心函数—range()函数

myzbx 2025-07-09 16:06 38 浏览

range()函数是Python中用于生成不可变数字序列的核心函数,它在循环控制和序列生成中扮演着重要角色。本文将全面解析range()函数的用法和特性。

1. range()函数的基本用法

1.1 基本语法

range(stop)
range(start, stop[, step])
  • start:序列起始值(包含,默认为0)
  • stop:序列结束值(不包含)
  • step:步长(默认为1)

1.2 三种调用方式

# 1. 只指定stop
print(list(range(5)))      # [0, 1, 2, 3, 4]

# 2. 指定start和stop
print(list(range(2, 7)))   # [2, 3, 4, 5, 6]

# 3. 指定start、stop和step
print(list(range(1, 10, 2)))  # [1, 3, 5, 7, 9]

2. range()函数的详细解析

2.1 生成递减序列

# 步长为负数可生成递减序列
print(list(range(10, 0, -1)))  # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
print(list(range(5, -5, -2)))  # [5, 3, 1, -1, -3]

2.2 range对象的特点

range对象是惰性序列,不会立即生成所有元素:

r = range(1000000)
print(sys.getsizeof(r))  # 占用很小内存,与范围大小无关

2.3 支持的操作

range对象支持序列操作

r = range(1, 10, 2)

# 索引访问
print(r[2])      # 5

# 切片(返回新的range对象)
print(r[:2])     # range(1, 5, 2)

# 成员检测
print(5 in r)    # True
print(6 in r)    # False

# 长度
print(len(r))    # 5

3. range()的实际应用

3.1 循环控制

# 基本for循环
for i in range(5):
    print(i)  # 0,1,2,3,4

# 带步长的循环
for i in range(0, 10, 2):
    print(i)  # 0,2,4,6,8

# 反向循环
for i in range(5, 0, -1):
    print(i)  # 5,4,3,2,1

3.2 生成索引序列

fruits = ['apple', 'banana', 'cherry']
for i in range(len(fruits)):
    print(f"{i}: {fruits[i]}")

3.3 数值序列生成

# 生成偶数序列
evens = list(range(0, 20, 2))

# 生成指定范围内的浮点数
def float_range(start, stop, step):
    return [start + i*step for i in range(int((stop-start)/step))]

print(float_range(0, 1, 0.1))  # [0.0, 0.1, 0.2, ..., 0.9]

4. 特殊用法和技巧

4.1 与enumerate()结合

fruits = ['apple', 'banana', 'cherry']
for i, fruit in enumerate(fruits):
    print(f"{i}: {fruit}")

4.2 替代传统C风格循环

Pythonic写法:

# 不推荐
for i in range(len(items)):
    print(items[i])

# 推荐
for item in items:
    print(item)

4.3 生成固定大小的空结构

# 初始化长度为10的空列表
empty_list = [None] * 10

# 使用range初始化
empty_list = [None for _ in range(10)]

5. 常见问题解答

5.1 range和xrange的区别?

  • Python 2中有range()(返回列表)和xrange()(返回生成器)
  • Python 3中range()等同于Python 2的xrange(),且移除了xrange()

5.2 为什么range不包含结束值?

这种设计(包含开始不包含结束):

  • 与Python切片行为一致
  • 方便计算长度:len(range(a,b)) == b-a
  • 避免数值精度问题导致的边界错误

5.3 如何实现包含结束值的range?

def inclusive_range(start, stop, step=1):
    return range(start, stop + (1 if step > 0 else -1), step)

print(list(inclusive_range(1, 5)))  # [1,2,3,4,5]

5.4 range对象可以重复使用吗?

可以,range是不可变序列,可以多次迭代:

r = range(3)
print(list(r))  # [0,1,2]
print(list(r))  # [0,1,2] 可以重复使用

6. 性能考虑

  • range对象在内存使用上非常高效
  • 在Python 3中,for i in range(n)比Python 2中的等效代码更快
  • 对于非常大的范围,使用range比生成列表更节省内存

7. 总结

range()函数是Python中生成数字序列的核心工具,主要特点包括:

  • 生成惰性计算的不可变序列
  • 支持正负步长
  • 内存高效,适合大范围数字
  • 支持序列基本操作(索引、切片等)

关键要点:

  • 结束值不包含在序列中
  • 步长可以是正数或负数
  • 在循环中优先直接使用range,而非先转换为列表
  • Python 3的range比Python 2的更高效

掌握range()函数能够帮助你:

  • 编写更高效的循环
  • 生成各种数字序列
  • 处理大数据集时节省内存
  • 编写更Pythonic的代码

相关推荐

如何设计一个优秀的电子商务产品详情页

加入人人都是产品经理【起点学院】产品经理实战训练营,BAT产品总监手把手带你学产品电子商务网站的产品详情页面无疑是设计师和开发人员关注的最重要的网页之一。产品详情页面是客户作出“加入购物车”决定的页面...

怎么在JS中使用Ajax进行异步请求?

大家好,今天我来分享一项JavaScript的实战技巧,即如何在JS中使用Ajax进行异步请求,让你的网页速度瞬间提升。Ajax是一种在不刷新整个网页的情况下与服务器进行数据交互的技术,可以实现异步加...

中小企业如何组建,管理团队_中小企业应当如何开展组织结构设计变革

前言写了太多关于产品的东西觉得应该换换口味.从码农到架构师,从前端到平面再到UI、UE,最后走向了产品这条不归路,其实以前一直再给你们讲.产品经理跟项目经理区别没有特别大,两个岗位之间有很...

前端监控 SDK 开发分享_前端监控系统 开源

一、前言随着前端的发展和被重视,慢慢的行业内对于前端监控系统的重视程度也在增加。这里不对为什么需要监控再做解释。那我们先直接说说需求。对于中小型公司来说,可以直接使用三方的监控,比如自己搭建一套免费的...

Ajax 会被 fetch 取代吗?Axios 怎么办?

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!今天给大家带来的主题是ajax、fetch...

前端面试题《AJAX》_前端面试ajax考点汇总

1.什么是ajax?ajax作用是什么?AJAX=异步JavaScript和XML。AJAX是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,AJAX可以使网页实...

Ajax 详细介绍_ajax

1、ajax是什么?asynchronousjavascriptandxml:异步的javascript和xml。ajax是用来改善用户体验的一种技术,其本质是利用浏览器内置的一个特殊的...

6款可替代dreamweaver的工具_替代powerdesigner的工具

dreamweaver对一个web前端工作者来说,再熟悉不过了,像我07年接触web前端开发就是用的dreamweaver,一直用到现在,身边的朋友有跟我推荐过各种更好用的可替代dreamweaver...

我敢保证,全网没有再比这更详细的Java知识点总结了,送你啊

接下来你看到的将是全网最详细的Java知识点总结,全文分为三大部分:Java基础、Java框架、Java+云数据小编将为大家仔细讲解每大部分里面的详细知识点,别眨眼,从小白到大佬、零基础到精通,你绝...

福斯《死侍》发布新剧照 "小贱贱"韦德被改造前造型曝光

时光网讯福斯出品的科幻片《死侍》今天发布新剧照,其中一张是较为罕见的死侍在被改造之前的剧照,其余两张剧照都是死侍在执行任务中的状态。据外媒推测,片方此时发布剧照,预计是为了给不久之后影片发布首款正式预...

2021年超详细的java学习路线总结—纯干货分享

本文整理了java开发的学习路线和相关的学习资源,非常适合零基础入门java的同学,希望大家在学习的时候,能够节省时间。纯干货,良心推荐!第一阶段:Java基础重点知识点:数据类型、核心语法、面向对象...

不用海淘,真黑五来到你身边:亚马逊15件热卖爆款推荐!

Fujifilm富士instaxMini8小黄人拍立得相机(黄色/蓝色)扫二维码进入购物页面黑五是入手一个轻巧可爱的拍立得相机的好时机,此款是mini8的小黄人特别版,除了颜色涂装成小黄人...

2025 年 Python 爬虫四大前沿技术:从异步到 AI

作为互联网大厂的后端Python爬虫开发,你是否也曾遇到过这些痛点:面对海量目标URL,单线程爬虫爬取一周还没完成任务;动态渲染的SPA页面,requests库返回的全是空白代码;好不容易...

最贱超级英雄《死侍》来了!_死侍超燃

死侍Deadpool(2016)导演:蒂姆·米勒编剧:略特·里斯/保罗·沃尼克主演:瑞恩·雷诺兹/莫蕾娜·巴卡林/吉娜·卡拉诺/艾德·斯克林/T·J·米勒类型:动作/...

停止javascript的ajax请求,取消axios请求,取消reactfetch请求

一、Ajax原生里可以通过XMLHttpRequest对象上的abort方法来中断ajax。注意abort方法不能阻止向服务器发送请求,只能停止当前ajax请求。停止javascript的ajax请求...