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.pswp.cn/news/534930.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/534930.shtml
英文地址,請注明出處:http://en.pswp.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 …