詳解Python中元組的三個不常用特性
1. 引言
元組是Python中一種重要的內(nèi)置數(shù)據(jù)類型。與列表一樣,我們經(jīng)常使用元組將多個對象保存為相應的數(shù)據(jù)容器。然而,與列表不同的是元組的不變性——一個不可改變的數(shù)據(jù)序列。
2. 舉個栗子
下面的代碼片段向我們展示了元組的一些常見用法。
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"
上述代碼段對我們來說功能很簡單。我們使用一對括號來創(chuàng)建一個元組對象,將不同元素括起來。我們可以通過索引來訪問元組中的單個元素。
除了上述元組的基本用法外,元組還具有其他鮮為人知的用法。讓我們在本文中回顧一下。
3. 創(chuàng)建包含單一元素的元組
正如上述代碼示例,我們使用一對括號來創(chuàng)建元組對象。通常,一個元組對象包含兩個或多個元素,我們使用逗號來分隔這些元素。
如果我們想創(chuàng)建一個僅包含一個元素的元組,我們應該怎么做?讓我們試試:
>>> 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)建元組對象。相反,它創(chuàng)建了一個整數(shù)。你也許想到了,正確的方法是需要在元素后面加一個逗號:
>>> math_score = (95,) >>> math_score[0] 95 >>> type(math_score) <class 'tuple'>
4. 使用下劃線和*來unpack元組
雖然我們可以通過索引來訪問元組的每項元素,但更常見的收單是使用unpack技術(shù),例如:
response = (404, "Can't access website") response_code, response_data = response
對于unpack技術(shù),我們定義了許多變量,這些變量的數(shù)量與元組的長度相匹配。即元組的每個元素都被分配給相應的變量。
如果我們不需要使用所有創(chuàng)建的變量,此時建議使用下劃線來表示這些未被使用的變量。例如針對上述例子,我們可能只對使用變量response_data ,而不使用response_data ,此時我們可以執(zhí)行以下操作:
_, response_data = response
這樣,我們就告訴代碼的讀者,此時我們只對訪問tuple對象的第二個元素感興趣。
當一個元組對象中有多個元素時,如果我們希望可以訪問多個連續(xù)的元素,此時我們可以使用星號表達式:
scores = (98, 95, 95, 92, 91) algebra, *others, zoology = scores assert others == [95, 95, 92]
如上所示,我們有一個元組對象,它按字母順序保存了各項課程的分數(shù),我們知道第一門課程是代數(shù),最后一門是動物學。在上面的例子中,我們通過星號進行unpack操作得到了在中間的三個分數(shù)。
5. 使用命名元組
我們可以使用索引或unpack操作來訪問元組的各個元素,以將這些元素分配給單獨的變量。有時,這樣做可能會很丑陋。
請參見以下示例:
location1 = (27.2, 7.5) location2 = (30.1, 8.4) location3 = (29.9, 7.7) latitude1 = location1[0] longitude2 = location2[1] latitude3, longitude3 = location3
上述代碼中,我們有三個location變量,顯示了各自的位置坐標。當我們訪問這些坐標的單個元素時,代碼看起來不那么簡潔。
雖然我們可以使用自定義類來實現(xiàn)坐標的數(shù)據(jù)類型,但對于這個簡單的數(shù)據(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通過指定類名及其屬性來創(chuàng)建命名元組類?,F(xiàn)在,我們可以通過調(diào)用類的構(gòu)造函數(shù)來創(chuàng)建命名元組類的實例。對于這些實例,我們可以使用點符號來訪問其屬性,這是常規(guī)元組對象無法使用的特性。
6. 總結(jié)
在本文中,我們回顧了Python中元組的三個特性。使用這些特性,可以極大地提升我們代碼的可讀性和可理解性,希望大家可以將其多多應用于日常工作中。
到此這篇關于詳解Python中元組的三個不常用特性的文章就介紹到這了,更多相關Python元組內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
pytorch 搭建神經(jīng)網(wǎng)路的實現(xiàn)
這篇文章主要介紹了pytorch 搭建神經(jīng)網(wǎng)路,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08淺談flask截獲所有訪問及before/after_request修飾器
這篇文章主要介紹了淺談flask截獲所有訪問及before/after_request修飾器,具有一定借鑒價值,需要的朋友可以參考下2018-01-01Python實現(xiàn)批量識別銀行卡號碼以及自動寫入Excel表格步驟詳解
這篇文章主要介紹了使用Python實現(xiàn)高效摸魚,批量識別銀行卡號碼并且自動寫入Excel表格,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧2023-01-01Python入門教程5. 字典基本操作【定義、運算、常用函數(shù)】
這篇文章主要介紹了Python字典基本操作,包括字典的基本定義、運算與常用函數(shù)相關使用技巧,代碼注釋中備有詳盡說明,便于理解,需要的朋友可以參考下2018-11-11