Python命名元組,命名元組示例,命名元組用法
Python的collection模塊提供了一項(xiàng)特性叫做“命名元組”(Namedtuple),它是一個(gè)具有命名元素的元組,使得代碼更加表達(dá)性。就像Python中的字典一樣,命名元組允許我們使用元組的成員而不是索引來(lái)訪問(wèn)元素。
創(chuàng)建命名元組
要?jiǎng)?chuàng)建一個(gè)命名元組,我們需要使用collection模塊中的namedtuple函數(shù)。
from collections import namedtuple # 定義一個(gè)名為Employee的命名元組,它具有id、name和location字段。 Employee = namedtuple('Employee', 'id name location') # 創(chuàng)建Employee的實(shí)例 employee1 = Employee(id=10, name='John Doe', location='Atlanta') employee2 = Employee(id=11, name='Mick', location='Dallas')
訪問(wèn)命名元組中的元素
命名元組提供了兩種訪問(wèn)元素的機(jī)制。第一種是通過(guò)屬性名來(lái)訪問(wèn)元素,第二種是使用傳統(tǒng)的數(shù)值索引。
print(f"{employee1.name} - {employee1.location}") # John Doe - Atlanta print(f"{employee2.name} - {employee2.location}") # Mick – Dallas
也可以使用數(shù)值索引來(lái)訪問(wèn)元素。
print(f"{employee1[1]} - {employee1[2]}") # John Doe - Atlanta print(f"{employee2[1]} - {employee2[2]}") # Mick – Dallas
不可變性
命名元組繼承了普通元組的不可變性,這是其一個(gè)基本特性。這意味著一旦在創(chuàng)建過(guò)程中設(shè)置了字段的值,就無(wú)法修改它。
try: employee1.name = 'David' except AttributeError as e: print(f"AttributeError: {e}") # AttributeError: can't set attribute
方法
`namedtuple`不僅提供了一種清晰易讀的方式來(lái)結(jié)構(gòu)化數(shù)據(jù),還提供了一些有用的方法,這些方法增強(qiáng)了`Namedtuple`的功能。
a) `_asdict()`:`_asdict()`方法將命名元組作為字典返回,提供了一種將`Namedtuple`轉(zhuǎn)換為與其他數(shù)據(jù)結(jié)構(gòu)兼容的格式的便捷方式。
employee1._asdict() # {'id': 10, 'name': 'John Doe', 'location': 'Atlanta'}
b) `_replace()`:`_replace()`方法創(chuàng)建一個(gè)具有指定字段替換為新值的新實(shí)例的命名元組。這個(gè)方法在保持不可變性的同時(shí)允許修改非常關(guān)鍵。
employee1_modified = employee1._replace(location='DFW') employee1_modified # Employee(id=10, name='John Doe', location='DFW')
c) `_make()`:`_make(iterable)`方法從可迭代對(duì)象中創(chuàng)建一個(gè)命名元組的新實(shí)例。例如,我們可以使用`_make()`方法從列表中創(chuàng)建一個(gè)命名元組。
employee_list = [21, 'Bob','Gallup'] Employee._make(employee_list) # Employee(id=21, name='Bob', location='Gallup')
命名元組的拆包
通過(guò)拆包過(guò)程,Python的命名元組可以使
我們能夠?qū)⑺鼈兊闹捣峙浣o單獨(dú)的變量,實(shí)現(xiàn)簡(jiǎn)潔的語(yǔ)句。
id, name, location = employee1 print(f"id: {id}, name: {name}, location:{location}")
將命名元組轉(zhuǎn)換為不同的數(shù)據(jù)結(jié)構(gòu)
通過(guò)使用`list()`構(gòu)造函數(shù),可以將命名元組轉(zhuǎn)換為列表。以下是一個(gè)示例:
list(employee1) # [10, 'John Doe', 'Atlanta']
使用`_asdict()`方法,可以將命名元組轉(zhuǎn)換為字典,該方法返回一個(gè)有序字典,可以將其轉(zhuǎn)換為常規(guī)字典。以下是一個(gè)示例:
dict(employee1._asdict()) # {'id': 10, 'name': 'John Doe', 'location': 'Atlanta'}
使用命名元組的優(yōu)勢(shì)
可讀性
命名元組通過(guò)為元素提供有意義的名稱來(lái)使代碼更加可讀,消除了基于索引訪問(wèn)的需求。
不可變性
和普通元組一樣,命名元組是不可變的。一旦創(chuàng)建,它們的值不能被改變。
內(nèi)存高效
相對(duì)于等價(jià)的類,命名元組在內(nèi)存上更加高效,占用更少的空間。需要注意的是,使用命名元組所獲得的內(nèi)存效率在涉及大量實(shí)例或處理大型數(shù)據(jù)集的場(chǎng)景中更為常見。
輕量級(jí)數(shù)據(jù)結(jié)構(gòu)
適用于創(chuàng)建簡(jiǎn)單類,無(wú)需自定義方法。
數(shù)據(jù)存儲(chǔ)
在不需要完整的類的情況下,方便存儲(chǔ)結(jié)構(gòu)化數(shù)據(jù)。
APIs和數(shù)據(jù)庫(kù)記錄
對(duì)于表示從數(shù)據(jù)庫(kù)返回的記錄或從API接收的數(shù)據(jù)非常有用。
Python中的命名元組非常適合需要簡(jiǎn)單、不可變的具有命名字段的數(shù)據(jù)結(jié)構(gòu)的場(chǎng)景,例如:
配置設(shè)置:使用命名元組表示配置設(shè)置,具有命名字段以提高清晰度和易訪問(wèn)性。
數(shù)據(jù)庫(kù)記錄:命名元組可以表示數(shù)據(jù)庫(kù)記錄,清楚地顯示哪個(gè)字段對(duì)應(yīng)于表中的哪個(gè)列。
命令行解析:使用命名元組存儲(chǔ)解析的命令行參數(shù),為輸入?yún)?shù)提供清晰結(jié)構(gòu)。
命名常量:命名元組可用于表示代碼中的命名常量,以清晰而可讀的方式定義常量值。文章來(lái)源:http://www.zghlxwxcb.cn/article/649.html
通過(guò)提供清晰、易讀和不可變性,命名元組在這些場(chǎng)景中表現(xiàn)出色,是一種有價(jià)值的工具來(lái)簡(jiǎn)潔地結(jié)構(gòu)化數(shù)據(jù)。文章來(lái)源地址http://www.zghlxwxcb.cn/article/649.html
到此這篇關(guān)于如何通過(guò)Python的命名元組(Namedtuple)來(lái)增強(qiáng)代碼可讀性?的文章就介紹到這了,更多相關(guān)內(nèi)容可以在右上角搜索或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!