python基本命令range_Python的Range()函数(指南)

8df3f3887dd34a1959c5c7f38b40633a

当需要执行特定次数的操作时,Python内置的range函数十分方便。

读罢本文,你将:

理解Python的range函数是如何工作的

了解Python 2和Python 3中的实现方式有何不同

看过了不少range()函数操作实例

有能力解决它的一些局限性

让我们开始吧!

range()函数的历史

虽然Python 2的range()和Python3中的range()共享了一个名字,但它们是完全不同的家伙。事实上,Python 3中的range()只是Python 2中被称为xrange的函数的重命名版本。

最初range()和xrange()都生成可以用for循环迭代的数字,但是前者同时生成这些数字的列表,而后者则懒洋洋地生成数字,这意味着后者只能在需要时一次返回一个数字。

巨大的列表会占用内存,所以xrange()取代range()的名称和一切都不奇怪。您可以在PEP 3100中了解更多关于这个决定和xrange() vs range()的背景信息。

注:PEP代表Python改善提议。PEPs是涵盖广泛主题的文档,其主题包括提出的新特性、风格、管理和哲学。

他们有很多。PEP 1解释了它们是如何工作的,并且是一个入门的好地方。

在本文其余部分中,您将使用Python 3中的range()函数。

让我们开始吧!

让我们来循环

在深入研究range()如何工作之前,我们需要先看看循环是如何工作的。循环是计算机科学中的一个重要概念。掌握循环是成为一名优秀程序员的第一步。

下面是Python中for循环的一个例子:

686f4765c6e7490b2c99f890b39f0b83

输出如下:

eb40d57105261518c958ce9b6a432b59

正如你所见,for循环使您可以执行特定的代码块,多少次都没问题。在这种情况下,我们遍历一个船长舰长名单,打印他们的名字。

虽然《星际迷航》很棒,但你可能想做的不仅仅是简单的圈出舰长的名单。有时,您只希望执行特定次数的代码块。循环可以帮助你做到这一点!

试运行下面的代码,其中的数字可以被3整除:

9de2d92a05f295f45250c78da62ec4b3

该循环的输出如下:

c41677c6d43dd11fd4742b311c9c6ce5

这是我们想要的输出,所以循环充分地完成了工作,但是还有另一种方法通过使用range()获得相同的结果。

注:最后一个代码示例有一些字符串格式化。更多相关内容参见:Python String Formatting Best Practices和Python 3’s f-Strings: An Improved String Formatting Syntax (Guide)

到此你已对循环更熟悉了,接下来让我们看看如何使用range()来简化。

从range()开始

那么Python的range函数是如何工作的呢?简单地说,range()允许你在给定范围内生成一系列数字。你可以根据传递给函数的参数数量决定该系列数字的开始和结束位置,以及该系列数字与下一个数字之间的步长。

让我们在操作中先睹为快:

0a0fd14afb8625206ea94075d380ebec

在这个for循环中,你可以轻松地创建可被3整除的一系列数字,而不必自己提供每个数字。

注:尽管这个例子适当的使用了range(),但通常不喜欢在for循环里中频繁使用range()。

例如,下面的range()用例,一般不被认为是Python风格的:

486dd92ff3b9f186019f65981f6d8ab4

range()非常适合创建数字的迭代,但是当你需要迭代可用in操作符完成循环的数据时,它不是最佳选择。

更多详情参见:How to Make Your Python Loops More Pythonic.

你可用下述三种方式调用range():

range(stop) 需要一个参数

range(start, stop) 需要两个参数

range(start, stop, step) 需要三个参数

range(stop)

当使用一个参数调用range()时,您将得到一系列数字,这些数字从0开始,包括直到(但不包括)stop的每个整数。

以下是实践中的情况:

4a2dbfa01da3db33ab05f1ae4a79e5fe

循环的输出如下

b906242450596ca6dbd8d4428927af40

结果显示:输出的所有数字都在0到3之间,但不包括提供的3。

range(start, stop)

当你用两个参数调用range()时,你不仅要决定一系列数字停止的位置,而且还要决定它从哪里开始,所以你不必总是在0点开始。可以使用range()来使用范围(A,B)生成从A到B的一系列数字。让我们来看看如何生成一个从1开始的范围。

尝试用两个参数调用range():

30f59775779331fbe9685d1e4486a607

输出如下:

22de6d58225beb504f872efb8b7c8cd4

到目前为止,非常好:您拥有从1(作为开始提供的数字)到但不包括8(作为停止提供的数字)的所有整数。

但是如果您再添加一个参数,那么您就能够重现前面使用number_divisible_by_three列表时得到的输出。

range(start, stop, step)

当使用三个参数调用range()时,您不仅可以选择数字序列的开始和停止位置,还可以选择一个数字与下一个数字之间的步长。如果不提供step,那么range()将自动取step=1。

注:step可以是正数也可以是负数,但不能为0:

4ceba405ef3fa931c949ce555c4474af

若以0为步长,将报错。

现在你知道如何使用step,可以回到我们之前看到的循环除以3。

自己试试看:

d62a9385e105b0032efb86e768488cd4

输出将完全类似于本文前面看到的使用名为number_divisible_by_three的列表时的for循环的输出:

c41677c6d43dd11fd4742b311c9c6ce5

正如你在这个例子中看到的,你可以使用step参数增加到一个更高的数值。这叫做递增

用range()实现递增

如果你想实现递增,那么你需要将step设为正数。为了解这个的现实意义,键入以下代码:

0d0a4f5e72de47133c9c9db632e53924

如果step取25,那么循环的输出将是这样的

28913e298b33018a4f6745cbcc33e0e0

你得到的数字比前一个数字大25——你提供的step。

现在,你已经看到了如何向前迈进一个距离,现在是时候看看你如何向后递减。

用range()实现递减

如果你的step是正数,那么你会得到一系列不断递增的数字。如果你的step为负数,那么你会得到一系列递减的数字。这可以让你从数字中倒退过来。

在下面的示例中,step取-2。这意味着每个循环的递减步长为2

bfb513f03f98475339de3a45b101c80d

递减循环的输出如下:

f75be79f8686c89d60f30f5cb4e51a17

你有一串数字,每一个都比前一个数字小2,这是你提供的step的绝对值。

创建一个递减范围的最快速的方法是使用range(start,stop,step)。但是Python确实有一个内置的反函数。如果在reversed()中包装range(),则可以以相反的顺序打印整数

试试看:

a29328933a614fdf09129ff3de7d6894

你将得到如下结果:

13eb3e716d2016c966f8f928645f7fde

range()使迭代递减的数序列成为可能,而reversed()通常用于以相反的顺序对序列进行循环。

注:reversed()也与字符串一起工作。你可以在How to Reverse a String in Python中了解更多关于字符串的reversed()的功能。

更深入使用range()

现在你知道了如何使用range()的基础知识,是时候深入挖掘一下了。

range()主要用于两个目的:

重复执行for循环的循环体指定次数

创建比使用列表或元组完成的更高效的整数迭代算法

第一种用法可能是最常用的,并且你可以找到一种比利用range()更高效的利用迭代工具的方法来构造迭代器。

下面是使用range时要记住的几个要点。

Python中range()是一种类型:

a2c5700ba7f1a17b2c37c947613a6978

你可以按索引访问range()中的项,就像列表中的那样:

e30f507e6eda959a2b21e9ebeddcab93

您甚至可以在range()上使用切片标记,但是REPL中的输出在一开始可能看起来有点奇怪:

a702a26dc9512bcbc20c6ff8c13812e3

尽管这个输出看起来很奇怪,对一个range()切片,又返回另一个range()。

可以通过索引和切片来访问range()的元素,这一事实突出了一个重要事实:range()与列表不同,是惰性的,但不是迭代器。

Float和range()

您可能已经注意到,到目前为止我们所处理的所有数字都是整数,也称为整数。这是因为range()只能以整数作为参数。

浮点一词:

在Python中,如果一个数字不是整数,那么它就是一个浮点。整数和浮点之间有一些区别。

整数(int数据类型):

·是整数

·不包括小数点

·可以是正数、负数或0

浮点数(浮点数据类型):

·可以是包含小数点的任何数字

·可以是正的也可以是负的

尝试用浮点调用range(),看看会发生什么:

52f56ccfba83cfd3f3b9838d8b6e5795

你应得到如下错误信息:

753da9760b048fc691b3b2629c90ead7

如果你需要找到一个可以让你使用浮点的解决方案,那么你可以使用NumPy。

使用NumPy

NumPy是第三方Python库。如果你要使用NumPy,第一步是检查你是否安装了它。

以下是你在REPL做到这一点的方法:

a3fc882489072384b36436dc6ef30bab

如果你得到了一个ModuleNotFoundError,那么你需要安装它。为此,请转到命令行并输入pip install numpy。

一旦安装完毕,请输入以下内容:

7f2fcc8c334f5aa2c23bfcbe563b944e

它的返回如下:

f59635c7bffa00e8a347a558ab8eb327

如果要换行打印每个数字,可以执行以下操作:

c8e7e60720a7c48ce488f9233d1c54d5

输出如下:

817f85d1471ca0a5e73a65bdbb31b44e

0.8999999999999999从哪来的?

计算机在二进制浮点数字中保存十进制浮点数字是困难的。这导致了各种意想不到的数字表示。

注:为了了解为什么有小数的问题,你可以看看这篇文章和Python文档。

您可能还想看一下十进制库,它在性能和可读性方面略有下降,但是允许您准确地表示十进制数。

另一个选择是使用round(),您可以在How to Round Numbers in Python中了解更多相关内容。请记住,round()有自己的怪癖,可能会产生一些令人惊讶的结果!

这些浮点错误是否对你来说是个问题,取决于你正在解决的问题。误差将存在于第十六位小数处,绝大多数时候这是微不足道的。它们太小了,除非你正在计算卫星轨道或其他东西,否则你不必担心它。

或者,您也可以使用np.linspace()。它本质上是相同的,但是使用不同的参数。使用np.linspace(),可以指定start和end(包含两者)以及数组的长度(而不是step)。

例如,np.linspace(1, 4, 20)给出了20个等距的数字:1.0, ..., 4.0.另一方面,np.linspace(0, 0.5, 51)给出0.00, 0.01, 0.02, 0.03, ..., 0.49, 0.50.

注:为了了解更多,您可以阅读Look Ma, No For-Loops: Array Programming With NumPyand this handy和NumPy reference.。

循环前行

现在,你已了解如何使用range()并处理其局限性。您还可以了解Python 2和Python 3之间的这个重要功能是如何演变的。

下一次你需要执行一个特定的次数,胸有成竹!

祝你Python编程玩得开心!

英文原文:https://realpython.com/python-range/

译者:盈韬

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/534930.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qos的_QoS 概述

QoS 是一个很大的领域,涉及到网络中的多个层次和环节。本文仅简要的谈谈 Endpoint 侧的 QoS 概念,将这些纷繁的概念名词串起来,便于理解。QoS 技术背景下图说明了 QoS workflow 中,各项技术的位置和关系摘自 < 端到端Q…

centos daemonize_手把手教你在centos上配置Django项目(超详细步骤)

前言关于Django的部署,本人也踩了很多坑,这篇文章一步一步教你怎么进行部署,只需要你按照我的步骤来就OK了!这里我们使用的服务器是一个全新的服务器,没有安装任何东西。基础环境搭建步骤★ 注意:下面的步骤…

mysql8.0.17压缩包安装教程_mysql 8.0.16 压缩包安装配置方法图文教程

本文为大家分享了mysql 8.0.16 压缩包安装配置方法,供大家参考,具体内容如下运行环境:windows 10 x641、下载zip安装包:mysql8.0 for windows zip包:,进入页面后可以不用登录。后点击底部“no thanks, just…

Mysql保存是事件驱动吗_【CHRIS RICHARDSON 微服务系列】事件驱动的数据管理-5

编者的话 |本文来自 Nginx 官方博客,是「Chris Richardson 微服务」系列的第五篇文章。第一篇文章介绍了微服务架构模式,并且讨论了使用微服务的优缺点;第二和第三篇描述了微服务架构模块间通讯的不同方面;第四篇研究了服务发现中…

chrome postman插件_收集了一些Chrome插件神器,助你快速成为老司机

刚开始开发项目的时候,我一直都在用火狐,因为它有一个fireBug插件,特别好用(目前已不支持),也不知道什么时候,就一直用起来Chrome浏览器了,可能是因为它有强大的插件作为后盾吧。开发了这么多年&#xff0c…

window.open不重复打开同一个名称的窗口_干货满满|Ctrl键的正确打开方式

“ctrl”是键盘中一个常用的键,全名为"control",中文意为"控制",在计算机基础中称为“控制键”。那么你知道“ctrl”都能控制什么吗?难道只知道 “ctrl”C 复制、“ctrl”V 粘贴 这些?&#xff1f…

jmeter安装包_分布式执行jmeter脚本步骤(非GUI)

备注:【Linux查看服务器是32位还是64位命令】uname -mgetconf LONG_BIT1.Linux环境安装jmeter可参考https://www.cnblogs.com/surewing/p/9271886.html如需要用到3台客户机,分别在三台机器中安装,以下安装之前需安装jdk环境1)将jm…

microbit编程_使用图形化编程实现主控板与手机蓝牙通讯(2019.3.25)

本文转自:DFRobot创客社区原文链接:[Mind]使用图形化编程实现主控板与手机蓝牙通讯-Mind论坛-DF创客社区​mc.dfrobot.com.cn本帖最后由 Forgotten 于 2019-3-25 12:58 编辑做项目时我们经常会遇到蓝牙的问题,例如使用appinventor制作一个app…

山海伏妖录java_山海伏妖录攻略大全 剧情结局加点妖兽大全

山海伏妖录是一款非常经典的ARPG游戏,其中有许多的剧情,结局,妖兽以及加点方案。Remilia为大家带来山海伏妖录攻略大全,各种攻略都能在这里查到,助您畅玩山海伏妖录!山海伏妖录人物介绍配角介绍山海伏妖录结…

spark环境搭建java_Spark MLlib 环境搭建超详细教程

1、系统及环境版本系统:Win7 旗舰版 64位 sp1JDK:1.8.0Spark:2.3.2Hadoop:2.7Scala:2.11.8文章最后,有所有版本的下载链接,不用再去折腾版本之间的问题。2、环境下载2.1 Spark 下载spark2.2 had…

python自动发邮件附件_python自动发送带附件的邮件(163邮箱,亲测可用)

1.设置发送邮件邮箱的SMTP服务 https://www.360kuai.com/pc/927b9f8da3555bb70?cota4&kuai_so1&tj_urlxz&sign360_57c3bbd1&refer_sceneso_1 设置步骤时,记住设置的邮箱的独立密码,在以下脚本中能够用到2. python脚本 import smtplib f…

java 导出bcp文件格式_使用BCP导出导入数据

bcp 实用工具可以在 Microsoft SQL Server 实例和用户指定格式的数据文件间大容量复制数据。 使用 bcp 实用工具可以将大量新行导入 SQL Server 表,或将表数据导出到数据文件。 除非与 queryout 选项一起使用,否则使用该实用工具不需要了解 Transact-SQL…

鱼骨图分析法实际案例_会用“鱼骨图”的项目经理无难题

项目经理在遇到一些瓶颈问题时,如何突破这些难题?答案就是鱼骨图!项目经理,广州深圳PMP培训,PMP认证考试培训机构,圣略PMP培训考试1、鱼骨图分析法介绍鱼骨图的由来及含义鱼骨图是由日本管理大师石川馨先生所发明出来的,故又名石川…

mysql5.6.msi 百度云_如何安装Mysql数据库类型msi(5.6)

首先让大家看下我下载的数据库有多少哈,还不包括我删除的一些数据库。光是8.0.17.0的数据库我就下载了四五个,经常安装数据报错,我一直找不到是啥原因,所以我就把所有的全部给删掉了,然后一遍一遍的安装。现在想想还真…

mysql如何下载msi_2、Windows下MySQL数据库下载与安装详细教程 MSI方式

做者:叁念mysql写在前言:本文篇幅比较长,可是整体分为三大部分:下载部分、安装部分、环境配置与测试部分 ;读者能够自行选择阅读web1、下载部分MySQL数据库下载与安装详细教程sql1.如何下载MySQL?(本文章以5.6版本实际…

python词云乱码_python词云库wordCloud使用方法详解(解决中文乱码)

文章中的例子主要借鉴wordColud的examples,在文章对examples中的例子做了一些改动。 一、wordColud设计中文词云乱码 使用wordColud设计词云的时候可能会产生乱码问题,因为wordColud默认的字体不支持中文,所以我们只需要替换wordColud的默认字…

linux同时安装python2和python3_linux-Centos7安装python3并与python2共存

1.查看是否已经安装Python CentOS 7.2 默认安装了python2.7.5 因为一些命令要用它比如yum 它使用的是python2.7.5。 使用 python -V 命令查看一下是否安装Python 然后使用命令 which python 查看一下Python可执行文件的位置可见执行文件在/usr/bin/ 目录下,切换到该…

opencv获取模板旋转角度_OpenCV入门之获取图像的旋转角度

在我们的日常生活中,所碰到的图像往往都有一定的倾斜。那么,如何用OpenCV来获取图像的旋转角度呢?   我们以下面的图片为例,简单介绍如何用OpenCV来获取图像的旋转角度。可以看到,该图像存在着许多噪声,且…

后台使用orm多还是直接sql_Django应用app创建及ORM

Django应用app创建及ORM一.重要知识点回顾:1. form表单提交数据的注意事项:1. 是form不是from,必须要有method和action (action用来指定你的数据提交到后台哪个地方,method用来指定你提交数据的方式)2. 所有获取用户输入的表单标签要放在form表单里面&am…

求一批整数中出现最多的个位数字_C语言经典100例007-求低n-1位的数

系列文章《C语言经典100例》持续创作中,欢迎大家的关注和支持。喜欢的同学记得点赞、转发、收藏哦~后续C语言经典100例将会以pdf和代码的形式发放到公众号欢迎关注:计算广告生态 即时查收1 题目函数:unsigned fun(unsigned w)功能…