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,一经查实,立即删除!

相关文章

天涯python_python 網絡爬蟲(一)爬取天涯論壇評論

我是一個大二的學生,也是剛接觸python,接觸了爬蟲感覺爬蟲很有趣就爬了爬天涯論壇,中途碰到了很多問題,就想把這些問題分享出來,都是些簡單的問題,希望大佬們以寬容的眼光來看一個小菜鳥😄&…

python快递费用计算_[Python]简单用Python写个查询快递的程序最后附源代码

[Python] 纯文本查看 复制代码from requests_html import HTMLSession session HTMLSession() def sb(dh): 用来识别快递 返回快递种类! url http://www.kuaidi100.com/autonumber/autoComNum?resultv21&text dh header { Referer: http://www.kuaidi100.com/, User-A…

qos的_QoS 概述

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

为什么python 为什么没有接口_python做接口测试的必要性

什么是接口测试 接口测试主要用于检测外部系统与内部系统之间,以及系统内部各 个子系统之间的交互点。其测试的重点是,检查数据的交换、传递和控 制管理过程,以及系统间的逻辑依赖关系等。 为什么要做接口测试 1.传统的测试方法成本急剧增加&…

路由器mysql密码重置密码_【验证】mysql root密码恢复

1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库。因为在重新设置MySQL的root密码的期间,MySQL数据库完全出于没有密码保护的状态下,其他的用户也可以任意地登录和修改MySQL的信息。可以采用将MySQL对外的…

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…

python收集数据程序_基于Python语言的互联网数据收集软件的设计

软件建立所需的工具及其版本 编写环境与 IDE Python3.5.2 Windows10 PyCharm 2016.3 Sublime Text3 第三方库与版本号 Requests 2.12.1 BeautifulSoup 4.5.1 PYQT5 5.8.1 Pyinstaller 库的作用 用于爬虫编写 用于爬虫编写 用于软件 GUI 设计 用于封装 python 程序 1.1 百度地图…

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

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

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

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

phpmyadmin 导出mysql,在phpmyadmin中导入/导出非常大的mysql数据库

i have a db in phpmyadmin having 3000000 records. i want to export this to another pc. now when i export this only 200000 entries exported into .sql file and that is also not imported on the other pc.解决方案Answering this for anyone else who lands here. I…

python字符串是否包含某元素_Python实现判断一个字符串是否包含子串的方法总结...

本文实例总结了Python实现判断一个字符串是否包含子串的方法。分享给大家供大家参考,具体如下: 1.使用成员操作符 in >>> snihao,shijie >>> tnihao >>> result t in s >>> print result True 2.使用string模块的f…

python怎么全选_有没有一种方法可以在Python网页上模拟“全选复制粘贴”?

我对Python相当陌生,我不知道selenium是什么,但是如果您能够找到某种模式,您应该能够执行您描述的内容。关键是找到一个模式。下面是几个示例脚本,它们可能会让您了解如何开始。在import urllib2from bs4 import BeautifulSoupf …