<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python range()的解釋和可視化

          共 3498字,需瀏覽 7分鐘

           ·

          2021-06-13 16:16

          ??



          我們將繼續(xù)深入研究各種Python函數(shù)、模塊和庫的內(nèi)部工作方式。在研究了enumerate()之后,我們現(xiàn)在來研究另一個重要的函數(shù)——range()。

          在本文中,我們將探討range()的功能并突出研究它的用例——您將了解如何在Python中有效地使用range(),了解它的強大的方面和局限性。與range()相關(guān)的問題經(jīng)常會在技術(shù)面試中出現(xiàn)——你查看過我們的Python面試問題了嗎?

          (與往常一樣,本文中的代碼來自Python 3)


          那么range()在Python中到底是做什么呢?

          range()是一個內(nèi)置函數(shù),這意味著Python是預(yù)先打包了它的。這個函數(shù)可以創(chuàng)建一個數(shù)字序列(稱為range對象)并返回它。當(dāng)然,您可以將這組數(shù)字用于各種目的: 如下所示,range()實際上能很好地與循環(huán)一起使用。
          下面是Python help()模塊提供的一個更專業(yè)的解釋:
          " 返回一個對象,該對象會從開始數(shù)字(包括)到停止數(shù)字(不包括)按步長生成一個整數(shù)序列。range(i, j)會產(chǎn)生i, i+1, i+2,…,j-1。開始數(shù)字默認為0,停止數(shù)字被省略!range(4)會產(chǎn)生0,1,2,3。這些正是一個4元素列表的有效索引。當(dāng)給定一個步長時,它指定了遞增數(shù)(或遞減數(shù))。

          Python中range()的語法

          讓我們設(shè)想最簡單的場景: range(5)
          生成序列……
          range()函數(shù)的語法很簡單——我們調(diào)用函數(shù)并輸入?yún)?shù):
          讓我們仔細看看每個參數(shù)的作用:
          1. start是一個可選參數(shù),它定義了序列的起始點。如果未指定,則默認為0。
          2. stop是定義序列終止點的必需參數(shù)。
          3. step是一個可選參數(shù),它定義了步長大小(即序列中各個整數(shù)之間被忽略的整數(shù)數(shù)量)。如果未指定,則默認為0。

          在Python中組合range()和List()

          range和list的使用過程
          假設(shè)參數(shù)為5時,我們可能想要展示序列中實際使用了哪些數(shù)字。要做到這一點,我們可以使用另一個Python內(nèi)置函數(shù)——list——來創(chuàng)建一個由函數(shù)調(diào)用range(5)將產(chǎn)生的數(shù)字組成的列表:
          這將輸出:



          在Python中將Range()與for循環(huán)組合

          循環(huán)和range的使用過程
          或者,我們可以使用一個for循環(huán)——它允許我們多次執(zhí)行給定的命令。這個過程稱為迭代,我們可以使用各種數(shù)據(jù)結(jié)構(gòu)(如字符串或列表)來指定“重復(fù)”的確切數(shù)量。當(dāng)然,我們也可以使用range()函數(shù)來實現(xiàn)這個目的——它基本上會運行該命令N次。
          由于Python清晰的語法,我們很容易記住for循環(huán)是如何工作的:“對于某個東西中的每個元素/部分/項,這樣做?!比欢?,它的輸出將是垂直的(每個print調(diào)用將以一個新行結(jié)束)——一些開發(fā)人員可能會發(fā)現(xiàn)它不方便或可讀性不強。要水平打印輸出,我們可以在print函數(shù)中添加end參數(shù):
          這樣,結(jié)果會更容易閱讀:


          關(guān)于range()的“Stop”參數(shù)的說明(在Python中也稱為包含范圍)

          現(xiàn)在,我們需要重申索引在幾乎所有編程語言中的工作方式。因為我們沒有指定start參數(shù),它默認被指定為0,我們的序列就變成了0 - 5。你可能會想,如果我們把這個序列放入一個列表并打印出來,這個列表應(yīng)該是這樣的:
          但是,最后一個索引(即stop參數(shù))不包含在此操作中,因此將其公式記為range(從數(shù)字X到——但是不包括——數(shù)字Z )是很有用的。
          當(dāng)我們想使用所有的三個參數(shù)時,我們可以來查看一個更復(fù)雜的情形:
          range的使用過程和停止位置
          前面小節(jié)(range(5))中的代碼實際上接收了3個參數(shù),盡管我們只輸入了一個參數(shù)。

          在Python中創(chuàng)建一個反轉(zhuǎn)的range()對象

          到目前為止,我們只使用了正整數(shù)來構(gòu)建遵循正常(即升序)順序的range對象——但是如果我們想要以相反的順序(即降序)使用range()呢?為了實現(xiàn)這個想法,我們需要將第三個range()參數(shù)——stop——設(shè)置為負數(shù)。讓我們想象一下,現(xiàn)在是12月31日,離新年只有10秒了,一個倒數(shù)計時器可以幫助我們倒數(shù)這10秒,就像它的名稱所表明的:

          這將輸出:
          注意:要連接(比如組合兩段數(shù)據(jù))整數(shù)和省略號(‘.....’符號),我們必須對它們調(diào)用str()函數(shù),以便將整數(shù)轉(zhuǎn)換為字符串——在我們的例子中是str(i)。否則,我們會遇到一個TypeError:


          Python中的range() : 應(yīng)用列表操作

          由于range()會返回一個列表,因此,我們可以對它應(yīng)用各種列表操作,包括切片;而xrange()則不提供此功能。
          這將輸出:


          Python中的range() 與 xrange(): 有什么不同?

          使用range和… 使用x-range?
          Python 3帶來了許多改進,但是其中一些變化背后的原因不是很清楚。一個很好的例子是從xrange() (Python2)到range() (Python3)的過渡,新的語言特性通常比它們的前輩要好,但是xrange()在某些方面仍然占上風(fēng)。讓我們來看看它們比較的結(jié)果如何:


          Python中的range() 與 xrange(): 這些函數(shù)返回什么

          雖然它們具有相同的功能,但它們返回值是其主要的區(qū)別。
          • range()返回一個列表。
          • xrange()返回一個xrange對象。
          盡管它們的輸出是相同的,但是它們返回值的差異是需要考慮的一個重要方面——它影響了這些函數(shù)的執(zhí)行方式和它們的使用方式。

          Python中的range() 與 xrange(): 這些函數(shù)的執(zhí)行速度如何

          當(dāng)我們比較技術(shù)A和技術(shù)B時,性能可以說是最重要的因素。當(dāng)然,在處理較小的數(shù)據(jù)集時,range()和xrange()的速度都非???然而,當(dāng)涉及到更大的數(shù)字時,其速度上的差異就變得明顯了。從xrange()切換到range()的一種可能的解釋是性能——但是性能真的提高了嗎?
          內(nèi)置的Python模塊timeit對于測試小代碼段的性能來說是最佳的。讓我們用它來比較range()和xrange()(注意,我們是從命令行中運行這些命令的,而不是從Python解釋器):
          雖然這些指標(biāo)可能會因計算機而異,但是平均速度差異大約是100%!這是可能的,因為xrange()會返回一個生成器對象——它只允許處理用戶需要的數(shù)字范圍,從而節(jié)省了時間和資源。(有趣的事實:這個過程稱為“惰性求值”)。


          Python中的range() 與 xrange(): 這些函數(shù)使用了多少內(nèi)存

          與timeit類似,另一個名為sys的內(nèi)置Python模塊可以幫助我們查看這兩個函數(shù)使用了多少內(nèi)存。為此,我們將使用sys模塊中的getsizeof()函數(shù):
          這將輸出:
          譯者注:第二行應(yīng)該是range()

          結(jié)  論

          Python中有用的模塊、庫和函數(shù)的數(shù)量有時可能看起來非常多。然而,現(xiàn)在您已經(jīng)掌握了另一個非常棒的函數(shù)——range(),并且它將永遠是您編程會話中的一個忠實伙伴。

          英文原文:https://blog.soshace.com/en/python/python-range-explained-and-visualized/
          譯者:野生大熊貓
          ···  END  ···

          推薦閱讀:
          一、Number(數(shù)字)
          Python基礎(chǔ)之?dāng)?shù)字(Number)超級詳解
          Python隨機模塊22個函數(shù)詳解
          Python數(shù)學(xué)math模塊55個函數(shù)詳解
          二、String(字符串)
          Python字符串的45個方法詳解
          Pandas向量化字符串操作
          三、List(列表)
          超級詳解系列-Python列表全面解析
          Python輕量級循環(huán)-列表推導(dǎo)式
          四、Tuple(元組)
          Python的元組,沒想象的那么簡單
          五、Set(集合)
          全面理解Python集合,17個方法全解,看完就夠了
          六、Dictionary(字典)
          Python字典詳解-超級完整版
          七、內(nèi)置函數(shù)
          Python初學(xué)者必須吃透這69個內(nèi)置函數(shù)!
          八、正則模塊
          Python正則表達式入門到入魔
          筆記 | 史上最全的正則表達式
          八、系統(tǒng)操作
          Python之shutil模塊11個常用函數(shù)詳解
          Python之OS模塊39個常用函數(shù)詳解
          九、進階模塊
          【萬字長文詳解】Python庫collections,讓你擊敗99%的Pythoner
          高手如何在Python中使用collections模塊

          ?

          ?

          瀏覽 37
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美色图一区二区三区 | 伊人av影院 | 欧美一级黄色丝袜大片免费 | 色欧美片视频在线观看专区 | 校园激情一区二区三区 |