詳解Python中元組的三個(gè)不常用特性
1. 引言
元組是Python中一種重要的內(nèi)置數(shù)據(jù)類型。與列表一樣,我們經(jīng)常使用元組將多個(gè)對(duì)象保存為相應(yīng)的數(shù)據(jù)容器。然而,與列表不同的是元組的不變性——一個(gè)不可改變的數(shù)據(jù)序列。
2. 舉個(gè)栗子
下面的代碼片段向我們展示了元組的一些常見(jiàn)用法。
response = (404, "Can't access website") response_code = response[0] response_data = response[1] assert response_code == 404 assert response_data == "Can't access website"
上述代碼段對(duì)我們來(lái)說(shuō)功能很簡(jiǎn)單。我們使用一對(duì)括號(hào)來(lái)創(chuàng)建一個(gè)元組對(duì)象,將不同元素括起來(lái)。我們可以通過(guò)索引來(lái)訪問(wèn)元組中的單個(gè)元素。
除了上述元組的基本用法外,元組還具有其他鮮為人知的用法。讓我們?cè)诒疚闹谢仡櫼幌隆?/p>
3. 創(chuàng)建包含單一元素的元組
正如上述代碼示例,我們使用一對(duì)括號(hào)來(lái)創(chuàng)建元組對(duì)象。通常,一個(gè)元組對(duì)象包含兩個(gè)或多個(gè)元素,我們使用逗號(hào)來(lái)分隔這些元素。
如果我們想創(chuàng)建一個(gè)僅包含一個(gè)元素的元組,我們應(yīng)該怎么做?讓我們?cè)囋嚕?/p>
>>> math_score = (95) >>> math_score[0] Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'int' object is not subscriptable >>> type(math_score) <class 'int'>
正如我們看到的一樣,(95)并不像我們中的一些人所想的那樣創(chuàng)建元組對(duì)象。相反,它創(chuàng)建了一個(gè)整數(shù)。你也許想到了,正確的方法是需要在元素后面加一個(gè)逗號(hào):
>>> math_score = (95,) >>> math_score[0] 95 >>> type(math_score) <class 'tuple'>
4. 使用下劃線和*來(lái)unpack元組
雖然我們可以通過(guò)索引來(lái)訪問(wèn)元組的每項(xiàng)元素,但更常見(jiàn)的收單是使用unpack技術(shù),例如:
response = (404, "Can't access website") response_code, response_data = response
對(duì)于unpack技術(shù),我們定義了許多變量,這些變量的數(shù)量與元組的長(zhǎng)度相匹配。即元組的每個(gè)元素都被分配給相應(yīng)的變量。
如果我們不需要使用所有創(chuàng)建的變量,此時(shí)建議使用下劃線來(lái)表示這些未被使用的變量。例如針對(duì)上述例子,我們可能只對(duì)使用變量response_data ,而不使用response_data ,此時(shí)我們可以執(zhí)行以下操作:
_, response_data = response
這樣,我們就告訴代碼的讀者,此時(shí)我們只對(duì)訪問(wèn)tuple對(duì)象的第二個(gè)元素感興趣。
當(dāng)一個(gè)元組對(duì)象中有多個(gè)元素時(shí),如果我們希望可以訪問(wèn)多個(gè)連續(xù)的元素,此時(shí)我們可以使用星號(hào)表達(dá)式:
scores = (98, 95, 95, 92, 91) algebra, *others, zoology = scores assert others == [95, 95, 92]
如上所示,我們有一個(gè)元組對(duì)象,它按字母順序保存了各項(xiàng)課程的分?jǐn)?shù),我們知道第一門課程是代數(shù),最后一門是動(dòng)物學(xué)。在上面的例子中,我們通過(guò)星號(hào)進(jìn)行unpack操作得到了在中間的三個(gè)分?jǐn)?shù)。
5. 使用命名元組
我們可以使用索引或unpack操作來(lái)訪問(wèn)元組的各個(gè)元素,以將這些元素分配給單獨(dú)的變量。有時(shí),這樣做可能會(huì)很丑陋。
請(qǐng)參見(jiàn)以下示例:
location1 = (27.2, 7.5) location2 = (30.1, 8.4) location3 = (29.9, 7.7) latitude1 = location1[0] longitude2 = location2[1] latitude3, longitude3 = location3
上述代碼中,我們有三個(gè)location變量,顯示了各自的位置坐標(biāo)。當(dāng)我們?cè)L問(wèn)這些坐標(biāo)的單個(gè)元素時(shí),代碼看起來(lái)不那么簡(jiǎn)潔。
雖然我們可以使用自定義類來(lái)實(shí)現(xiàn)坐標(biāo)的數(shù)據(jù)類型,但對(duì)于這個(gè)簡(jiǎn)單的數(shù)據(jù)類型,自定義類可能顯得有些臃腫。相反,我們可以使用命名元組來(lái)作為輕量級(jí)數(shù)據(jù)類型,如下:
from collections import namedtuple
Location = namedtuple("Location",
["latitude", "longitude"])
location1 = Location(27.2, 7.5)
location2 = Location(30.1, 8.4)
location3 = Location(29.9, 7.7)
latitude1 = location1.latitude
longitude2 = location2.longitude
location3.latitude, location3.longitude
如上所示,我們調(diào)用namedtuple通過(guò)指定類名及其屬性來(lái)創(chuàng)建命名元組類?,F(xiàn)在,我們可以通過(guò)調(diào)用類的構(gòu)造函數(shù)來(lái)創(chuàng)建命名元組類的實(shí)例。對(duì)于這些實(shí)例,我們可以使用點(diǎn)符號(hào)來(lái)訪問(wèn)其屬性,這是常規(guī)元組對(duì)象無(wú)法使用的特性。
6. 總結(jié)
在本文中,我們回顧了Python中元組的三個(gè)特性。使用這些特性,可以極大地提升我們代碼的可讀性和可理解性,希望大家可以將其多多應(yīng)用于日常工作中。
到此這篇關(guān)于詳解Python中元組的三個(gè)不常用特性的文章就介紹到這了,更多相關(guān)Python元組內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python從數(shù)據(jù)庫(kù)讀取大量數(shù)據(jù)批量寫(xiě)入文件的方法
今天小編就為大家分享一篇Python從數(shù)據(jù)庫(kù)讀取大量數(shù)據(jù)批量寫(xiě)入文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
Python使用mmap實(shí)現(xiàn)內(nèi)存映射文件操作
內(nèi)存映射通??梢蕴岣逫/O的性能,本文主要介紹了Python使用mmap實(shí)現(xiàn)內(nèi)存映射文件操作,分享給大家,感興趣的可以了解一下2021-06-06
關(guān)于numpy.where()函數(shù) 返回值的解釋
今天小編就為大家分享一篇關(guān)于numpy.where()函數(shù) 返回值的解釋,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12
Django2.2配置xadmin的實(shí)現(xiàn)
這篇文章主要介紹了Django2.2配置xadmin的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05
基于Pytorch實(shí)現(xiàn)分類器的示例詳解
這篇文章主要為大家詳細(xì)介紹了如何基于Pytorch實(shí)現(xiàn)兩個(gè)分類器:?softmax分類器和感知機(jī)分類器,文中的示例代碼講解詳細(xì),需要的可以參考一下2023-04-04
Python實(shí)現(xiàn)對(duì)文件進(jìn)行單詞劃分并去重排序操作示例
這篇文章主要介紹了Python實(shí)現(xiàn)對(duì)文件進(jìn)行單詞劃分并去重排序操作,涉及Python文件讀取、字符串遍歷、拆分、排序等相關(guān)操作技巧,需要的朋友可以參考下2018-07-07
學(xué)習(xí)Python中一些實(shí)用的庫(kù)
這篇文章主要介紹了Python學(xué)習(xí)之盤點(diǎn)一些Python中實(shí)用的庫(kù),有需要的同學(xué)可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2021-09-09

