Python range()的解释和可视化(python中range作用)
off999 2024-09-20 22:52 28 浏览 0 评论
在Python中用示例解释和可视化range()函数
我们将继续深入研究各种Python函数、模块和库的内部工作方式。在研究了enumerate()之后,我们现在来研究另一个重要的函数——range()。
在本文中,我们将探讨range()的功能并突出研究它的用例——您将了解如何在Python中有效地使用range(),了解它的强大的方面和局限性。与range()相关的问题经常会在技术面试中出现——你查看过我们的Python面试问题了吗?
(与往常一样,本文中的代码来自Python 3)
那么range()在Python中到底是做什么呢?
range()是一个内置函数,这意味着Python是预先打包了它的。这个函数可以创建一个数字序列(称为range对象)并返回它。当然,您可以将这组数字用于各种目的: 如下所示,range()实际上能很好地与循环一起使用。
下面是Python help()模块提供的一个更专业的解释:
" 返回一个对象,该对象会从开始数字(包括)到停止数字(不包括)按步长生成一个整数序列。range(i, j)会产生i, i+1, i+2,…,j-1。开始数字默认为0,停止数字被省略!range(4)会产生0,1,2,3。这些正是一个4元素列表的有效索引。当给定一个步长时,它指定了递增数(或递减数)。
Python中range()的语法
让我们设想最简单的场景: range(5)
生成序列……
range()函数的语法很简单——我们调用函数并输入参数:
让我们仔细看看每个参数的作用:
- start是一个可选参数,它定义了序列的起始点。如果未指定,则默认为0。
- stop是定义序列终止点的必需参数。
- step是一个可选参数,它定义了步长大小(即序列中各个整数之间被忽略的整数数量)。如果未指定,则默认为0。
在Python中组合range()和List()
range和list的使用过程
假设参数为5时,我们可能想要展示序列中实际使用了哪些数字。要做到这一点,我们可以使用另一个Python内置函数——list——来创建一个由函数调用range(5)将产生的数字组成的列表:
这将输出:
在Python中将Range()与for循环组合
循环和range的使用过程
或者,我们可以使用一个for循环——它允许我们多次执行给定的命令。这个过程称为迭代,我们可以使用各种数据结构(如字符串或列表)来指定“重复”的确切数量。当然,我们也可以使用range()函数来实现这个目的——它基本上会运行该命令N次。
由于Python清晰的语法,我们很容易记住for循环是如何工作的:“对于某个东西中的每个元素/部分/项,这样做。”然而,它的输出将是垂直的(每个print调用将以一个新行结束)——一些开发人员可能会发现它不方便或可读性不强。要水平打印输出,我们可以在print函数中添加end参数:
这样,结果会更容易阅读:
关于range()的“Stop”参数的说明(在Python中也称为包含范围)
现在,我们需要重申索引在几乎所有编程语言中的工作方式。因为我们没有指定start参数,它默认被指定为0,我们的序列就变成了0 - 5。你可能会想,如果我们把这个序列放入一个列表并打印出来,这个列表应该是这样的:
但是,最后一个索引(即stop参数)不包含在此操作中,因此将其公式记为range(从数字X到——但是不包括——数字Z )是很有用的。
当我们想使用所有的三个参数时,我们可以来查看一个更复杂的情形:
range的使用过程和停止位置
前面小节(range(5))中的代码实际上接收了3个参数,尽管我们只输入了一个参数。
在Python中创建一个反转的range()对象
到目前为止,我们只使用了正整数来构建遵循正常(即升序)顺序的range对象——但是如果我们想要以相反的顺序(即降序)使用range()呢?为了实现这个想法,我们需要将第三个range()参数——stop——设置为负数。让我们想象一下,现在是12月31日,离新年只有10秒了,一个倒数计时器可以帮助我们倒数这10秒,就像它的名称所表明的:
这将输出:
注意:要连接(比如组合两段数据)整数和省略号(‘.....’符号),我们必须对它们调用str()函数,以便将整数转换为字符串——在我们的例子中是str(i)。否则,我们会遇到一个TypeError:
Python中的range() : 应用列表操作
由于range()会返回一个列表,因此,我们可以对它应用各种列表操作,包括切片;而xrange()则不提供此功能。
这将输出:
Python中的range() 与 xrange(): 有什么不同?
使用range和… 使用x-range?
Python 3带来了许多改进,但是其中一些变化背后的原因不是很清楚。一个很好的例子是从xrange() (Python2)到range() (Python3)的过渡,新的语言特性通常比它们的前辈要好,但是xrange()在某些方面仍然占上风。让我们来看看它们比较的结果如何:
Python中的range() 与 xrange(): 这些函数返回什么
虽然它们具有相同的功能,但它们返回值是其主要的区别。
- range()返回一个列表。
- xrange()返回一个xrange对象。
尽管它们的输出是相同的,但是它们返回值的差异是需要考虑的一个重要方面——它影响了这些函数的执行方式和它们的使用方式。
Python中的range() 与 xrange(): 这些函数的执行速度如何
当我们比较技术A和技术B时,性能可以说是最重要的因素。当然,在处理较小的数据集时,range()和xrange()的速度都非常快;然而,当涉及到更大的数字时,其速度上的差异就变得明显了。从xrange()切换到range()的一种可能的解释是性能——但是性能真的提高了吗?
内置的Python模块timeit对于测试小代码段的性能来说是最佳的。让我们用它来比较range()和xrange()(注意,我们是从命令行中运行这些命令的,而不是从Python解释器):
虽然这些指标可能会因计算机而异,但是平均速度差异大约是100%!这是可能的,因为xrange()会返回一个生成器对象——它只允许处理用户需要的数字范围,从而节省了时间和资源。(有趣的事实:这个过程称为“惰性求值”)。
Python中的range() 与 xrange(): 这些函数使用了多少内存
与timeit类似,另一个名为sys的内置Python模块可以帮助我们查看这两个函数使用了多少内存。为此,我们将使用sys模块中的getsizeof()函数:
这将输出:
译者注:第二行应该是range()
结论
Python中有用的模块、库和函数的数量有时可能看起来非常多。然而,现在您已经掌握了另一个非常棒的函数——range(),并且它将永远是您编程会话中的一个忠实伙伴。
相关推荐
- apisix动态修改路由的原理_动态路由协议rip的配置
-
ApacheAPISIX能够实现动态修改路由(DynamicRouting)的核心原理,是它将传统的静态Nginx配置彻底解耦,通过中心化配置存储(如etcd)+OpenRest...
- 使用 Docker 部署 OpenResty Manager 搭建可视化反向代理系统
-
在之前的文章中,xiaoz推荐过可视化Nginx反向代理工具NginxProxyManager,最近xiaoz还发现一款功能更加强大,界面更加漂亮的OpenRestyManager,完全可以替代...
- OpenResty 入门指南:从基础到动态路由实战
-
一、引言1.1OpenResty简介OpenResty是一款基于Nginx的高性能Web平台,通过集成Lua脚本和丰富的模块,将Nginx从静态反向代理转变为可动态编程的应用平台...
- OpenResty 的 Lua 动态能力_openresty 动态upstream
-
OpenResty的Lua动态能力是其最核心的优势,它将LuaJIT嵌入到Nginx的每一个请求处理阶段,使得开发者可以用Lua脚本动态控制请求的生命周期,而无需重新编译或rel...
- LVS和Nginx_lvs和nginx的区别
-
LVS(LinuxVirtualServer)和Nginx都是常用的负载均衡解决方案,广泛应用于大型网站和分布式系统中,以提高系统的性能、可用性和可扩展性。一、基本概念1.LVS(Linux...
- 外网连接到内网服务器需要端口映射吗,如何操作?
-
外网访问内网服务器通常需要端口映射(或内网穿透),这是跨越公网与私网边界的关键技术。操作方式取决于网络环境,以下分场景详解。一、端口映射的核心原理内网服务器位于私有IP地址段(如192.168.x.x...
- Nginx如何解决C10K问题(1万个并发连接)?
-
关注△mikechen△,十余年BAT架构经验倾囊相授!大家好,我是mikechen。Nginx是大型架构的必备中间件,下面我就全面来详解NginxC10k问题@mikechen文章来源:mikec...
- 炸场!Spring Boot 9 大内置过滤器实战手册:从坑到神
-
炸场!SpringBoot9大内置过滤器实战手册:从坑到神在Java开发圈摸爬滚打十年,见过太多团队重复造轮子——明明SpringBoot自带的过滤器就能解决的问题,偏偏要手写几十...
- WordPress和Typecho xmlrpc漏洞_wordpress主题漏洞
-
一般大家都关注WordPress,毕竟用户量巨大,而国内的Typecho作为轻量级的博客系统就关注的人并不多。Typecho有很多借鉴WordPress的,包括兼容的xmlrpc接口,而WordPre...
- Linux Shell 入门教程(六):重定向、管道与命令替换
-
在前几篇中,我们学习了函数、流程控制等Shell编程的基础内容。现在我们来探索更高级的功能:如何控制数据流向、将命令链接在一起、让命令间通信变得可能。一、输入输出重定向(>、>>...
- Nginx的location匹配规则,90%的人都没完全搞懂,一张图让你秒懂
-
刚配完nginx网站就崩了?运维和开发都头疼的location匹配规则优先级,弄错顺序直接导致500错误。核心在于nginx处理location时顺序严格:先精确匹配=,然后前缀匹配^~,接着按顺序正...
- liunx服务器查看故障命令有那些?_linux查看服务器性能命令
-
在Linux服务器上排查故障时,需要使用一系列命令来检查系统状态、日志文件、资源利用情况以及网络状况。以下是常用的故障排查命令,按照不同场景分类说明。1.系统资源相关命令1.1查看CPU使...
- 服务器被入侵的常见迹象有哪些?_服务器入侵可以被完全操纵吗
-
服务器被入侵可能会导致数据泄露、服务异常或完全失控。及时发现入侵迹象能够帮助你尽早采取措施,减少损失。以下是服务器被入侵的常见迹象以及相关的分析与处理建议。1.服务器被入侵的常见迹象1.1系统性能...
- 前端错误可观测最佳实践_前端错误提示
-
场景解析对于前端项目,生产环境的代码通常经过压缩、混淆和打包处理,当代码在运行过程中产生错误时,通常难以还原原始代码从而定位问题,对于深度混淆尤其如此,因此Mozilla自2011年开始发起并...
- 8个能让你的Kubernetes集群“瞬间崩溃”的配置错误
-
错误一:livenessProbe探针“自杀式”配置——30秒内让Pod重启20次现象:Pod状态在Running→Terminating→CrashLoopBackOff之间循环,重启间隔仅...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- apisix动态修改路由的原理_动态路由协议rip的配置
- 使用 Docker 部署 OpenResty Manager 搭建可视化反向代理系统
- OpenResty 入门指南:从基础到动态路由实战
- OpenResty 的 Lua 动态能力_openresty 动态upstream
- LVS和Nginx_lvs和nginx的区别
- 外网连接到内网服务器需要端口映射吗,如何操作?
- Nginx如何解决C10K问题(1万个并发连接)?
- 炸场!Spring Boot 9 大内置过滤器实战手册:从坑到神
- WordPress和Typecho xmlrpc漏洞_wordpress主题漏洞
- Linux Shell 入门教程(六):重定向、管道与命令替换
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)