溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Python命名元組怎么使用

發(fā)布時(shí)間:2023-04-13 11:23:38 來(lái)源:億速云 閱讀:120 作者:iii 欄目:編程語(yǔ)言

今天小編給大家分享一下Python命名元組怎么使用的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來(lái)了解一下吧。

創(chuàng)建命名元組

Python集合中的命名元組類(lèi)namedTuples為元組中的每個(gè)位置賦予意義,并增強(qiáng)代碼的可讀性和描述性。它們可以在任何使用常規(guī)元組的地方使用,且增加了通過(guò)名稱(chēng)而不是位置索引方式訪問(wèn)字段的能力。其來(lái)自Python內(nèi)置模塊collections。其使用的常規(guī)語(yǔ)法方式為:

import collections
XxNamedTuple = collections.namedtuple(typename, field_names):

如果導(dǎo)入的方式不同,比如:import collections as cAlias、from collections import namedtuple、from collections import namedtuple as NamedTuple等,這樣我們創(chuàng)建的命名元祖子類(lèi)的形式可以對(duì)應(yīng)為:

XxNamedTuple = cAlias.namedtuple(……)
XxNamedTuple = namedtuple(……)
XxNamedTuple = NamedTuple(……)

其中:

參數(shù)typename:為返回的新元組子類(lèi)XxNamedTuple指定一個(gè)字符串型類(lèi)名稱(chēng)。新的子類(lèi)用于創(chuàng)建類(lèi)似元組的對(duì)象,所創(chuàng)建的對(duì)象具有可通過(guò)屬性查找、位置索引以及迭代的方式來(lái)訪問(wèn)的相關(guān)字段。子類(lèi)的實(shí)例還有一個(gè)有用的文檔字符串(相當(dāng)于幫助文檔,帶有typename和field_names)和一個(gè)有用的__repr__()方法,該方法以名稱(chēng)=值的格式列出元組內(nèi)容。

參數(shù)field_names:是通常是一個(gè)字符串序列,如[' x ', ' y ']。作為可選方式,field_names也可以是一個(gè)字符串,但包含的相應(yīng)字段名是用空格和/或逗號(hào)分隔,例如' x y '或' x, y '。

任何有效的Python標(biāo)識(shí)符都可以用作命名字段名稱(chēng),但不能以下劃線(_)開(kāi)始。有效的標(biāo)識(shí)符包括字母、數(shù)字和下劃線,但不要以數(shù)字或下劃線開(kāi)始,不能使用關(guān)鍵字,如class、return、global、pass或raise等。

為了理解NamedTuple是如何工作的,我們假設(shè)有一個(gè)Employee對(duì)象,其擁有id、name和age屬性。請(qǐng)看代碼示例清單:

Python命名元組怎么使用

運(yùn)行程序輸出結(jié)果類(lèi)似如下:

Employee(, name='Solo Cui ', age='18')
按索引方式訪問(wèn)Employee的名子為 : Solo Cui
Employee(, name='Annie Kent', age='26')
按鍵(字段名)訪問(wèn)Employee的名子為 : Annie Kent

另外,創(chuàng)建命名元組的函數(shù)中其它幾個(gè)參數(shù)用的少,這里僅作簡(jiǎn)單介紹:

參數(shù)rename:如果rename為true,無(wú)效的字段名將自動(dòng)替換為位置名。例如,['abc', 'def', 'ghi', 'abc']被轉(zhuǎn)換為['abc', '_1', 'ghi', '_3'],消除了關(guān)鍵字def和重復(fù)的字段名abc。

參數(shù)defaults:可以是None或默認(rèn)值的可迭代對(duì)象。由于帶有默認(rèn)值的字段必須出現(xiàn)在任何沒(méi)有默認(rèn)值的字段之后,因此默認(rèn)值應(yīng)用于最右邊的參數(shù),依次向左。例如,如果字段名是['x', 'y', 'z'],默認(rèn)值是(1,2),那么x將是一個(gè)必需的參數(shù),y將默認(rèn)值為1,z將默認(rèn)值為2。

參數(shù)module:如果定義了module,則命名元組的__module__屬性設(shè)置為該值。

命名元組實(shí)例沒(méi)有為每個(gè)實(shí)例單獨(dú)使用字典,所以它們是輕量級(jí)的,不需要比常規(guī)元組更多的內(nèi)存。

命名元組特定方法

除了從元組繼承的方法之外,命名元組還支持另外三個(gè)方法和兩個(gè)屬性。為了防止與字段名發(fā)生沖突,方法和屬性名以下劃線開(kāi)頭。分別介紹如下:

1)_make(iterable):

類(lèi)方法,從現(xiàn)有序列或可迭代對(duì)象生成新實(shí)例。代碼示例如下:

Python命名元組怎么使用

輸出結(jié)果類(lèi)似如下:

Employee(, name='Batman', age='28')

2)_asdict ():

返回一個(gè)新的字典,它將字段名映射到對(duì)應(yīng)的值。示例代碼如下:

Python命名元組怎么使用

輸出結(jié)果類(lèi)似如下:

{'id': '333', 'name': 'Batman', 'age': '28'}

3)_replace (**kwargs):

返回一個(gè)命名元組的新實(shí)例,用新值替換指定字段。代碼示例如下:

Python命名元組怎么使用

輸出結(jié)果如下:

Employee(, name='Batman', age='34')

4)_fields:

以字符串元組方式列出字段名的。用于自省和從現(xiàn)有的命名元組創(chuàng)建新的命名元組類(lèi)型。示例代碼如下:

Python命名元組怎么使用

輸出結(jié)果為:

('id', 'name', 'age')

我們可以使用_fields屬性從現(xiàn)有的命名元組中創(chuàng)建新的命名元組。示例如下:

Python命名元組怎么使用

輸出結(jié)果類(lèi)似如下:

Pixel(x=5, y=8, red=128, green=255, blue=0)
結(jié)果的實(shí)體性賦值

這里所說(shuō)的實(shí)體,類(lèi)似Java中的數(shù)據(jù)實(shí)體對(duì)象——只有簡(jiǎn)單的屬性字段。而命名元組在為csv或sqlite3模塊操作而返回的元組結(jié)果分配給對(duì)應(yīng)字段名而裝配成簡(jiǎn)單實(shí)體時(shí)特別有用,自動(dòng)進(jìn)行字段的對(duì)應(yīng)賦值。比如在當(dāng)前Python程序位置有個(gè)employees.csv,其包含內(nèi)容如下:

張三,26,工程師,開(kāi)發(fā)部,中級(jí)
李四,32,項(xiàng)目經(jīng)理,項(xiàng)目部,高級(jí)

通過(guò)示例,我們來(lái)完成Employee實(shí)體的命名元組的自動(dòng)裝配,代碼示例如下:

Python命名元組怎么使用

輸出結(jié)果類(lèi)似如下:

張三 工程師 26 開(kāi)發(fā)部 中級(jí)
李四 項(xiàng)目經(jīng)理 32 項(xiàng)目部 高級(jí)

再簡(jiǎn)單地來(lái)個(gè)數(shù)據(jù)庫(kù)操作和裝配實(shí)體的示例,代碼清單如下:

Python命名元組怎么使用

我這里只是簡(jiǎn)單的創(chuàng)建了數(shù)據(jù)庫(kù)并創(chuàng)建表,然后插入一條數(shù)據(jù),再查詢(xún)并完成命名元組的實(shí)體化裝配和結(jié)果輸出。

運(yùn)行輸出結(jié)果如下:

王武 經(jīng)理

以上就是“Python命名元組怎么使用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI