Python 的集合模組有一個稱為「Namedtuple」的功能,「Namedtuple」是一個帶有命名元素的元組,使程式碼更具表現力。就像 Python 中的字典一樣,「Namedtuple」允許我們使用元組的成員而不是索引來存取元素。
Python 的集合模組有一個稱為「Namedtuple」的功能,「Namedtuple」是一個帶有命名元素的元組,使程式碼更具表現力。就像 Python 中的字典一樣,「Namedtuple」允許我們使用元組的成員而不是索引來存取元素。
要建立一個命名元組,我們必須使用集合模組中的函數「namedtuple」。
from collections import namedtuple # Define a employee tuple that has fields id, name and location. Employee = namedtuple ('Employee', 'id name location') # Create instances of Employee employee1 = Employee (id=10, name='John Doe', location='Atlanta') employee2 = Employee (id=11, name='Mick', location='Dallas')
「Namedtuple」為元素存取提供了雙重機制。首先,可以透過屬性名稱存取元素,第二種機制使用傳統的數字索引。
print(f"{employee1.name} - {employee1.location}") # John Doe - Atlanta print(f"{employee2.name} - {employee2.location}") # Mick – Dallas
也可以使用數字索引來存取元素。
print(f"{employee1[1]} - {employee1[2]}") # John Doe - Atlanta print(f"{employee2[1]} - {employee2[2]}") # Mick – Dallas
不可變性是「Namedtuples」的基本屬性,繼承自常規元組。這意味著一旦在建立過程中設定了欄位的值,就無法修改。
try: employee1.name = 'David' except AttributeError as e: print(f"AttributeError: {e}") # AttributeError: can't set attribute
「Namedtuple」不僅提供了一種乾淨且可讀的方法來建立數據,而且還提供了一些有用的方法,這些方法增強了「Namedtuple」的功能。
a) _asdict():_asdict() 方法以字典形式傳回命名元組,提供了一種將「Namedtuples」轉換為與其他資料結構相容的格式的便捷方法。
employee1._asdict() # {'id': 10, 'name': 'John Doe', 'location': 'Atlanta'}
b) _replace():_replace() 方法建立「Namedtuple」的新實例,其中指定的欄位替換為新值。這種方法對於在允許修改的同時保持不可變至關重要。
employee1_modified = employee1._replace(location='DFW') employee1_modified # Employee(id=10, name='John Doe', location='DFW')
c) _make():_make(iterable) 方法從可迭代物件建立「namedtuple」的新實例。例如,我們可以使用 _make() 方法從清單中建立一個 Namedtuple。
employee_list = [21, 'Bob','Gallup'] Employee._make(employee_list) # Employee(id=21, name='Bob', location='Gallup')
透過解包過程,Python 的「Namedtuples」可讓您在單一簡潔的語句中將它們的值指派給各個變數。
id, name, location = employee1 print(f"id: {id}, name: {name}, location:{location}")
將「Namedtuples」轉換為不同的資料結構
您可以使用 list() 建構子將命名元組轉換為清單。以下是一個範例:
list(employee1) # [10, 'John Doe', 'Atlanta']
您可以使用「_asdict()」方法將命名元組轉換為字典,該方法傳回一個 OrderedDict,您可以將其轉換為常規字典。以下是一個範例:
dict(employee1._asdict()) # {'id': 10, 'name': 'John Doe', 'location': 'Atlanta'}
可讀性:「Namedtuples」透過為元素提供有意義的名稱,使程式碼更具可讀性,從而消除了基於索引的存取的需要。
變:與常規元組一樣,「Namedtuples」是不可變的。一旦創建,其值就無法變更。
記憶體效率:「Namedtuples」具有記憶體效率,與等效類別相比,佔用的空間更少。請務必注意,使用 Namedtuples 獲得的記憶體效率在涉及大量實例的方案或處理大型資料集時更為常見。
輕量級資料結構: 非常適合建立簡單的類,而無需自訂方法。
資料儲存: 便於儲存結構化數據,尤其是在不需要完整類別的情況下。
API 和資料庫記錄: 用來表示從資料庫傳回的記錄或從 API 接收的資料。
Python 中的「Namedtuple」非常適合需要具有命名欄位的簡單、不可變資料結構的場景,例如
設定設定:使用「Namedtuple」表示帶有命名字段的配置設置,以便清晰易用。
資料庫記錄:「Namedtuple」可以表示資料庫記錄,明確哪個欄位對應於表中的哪一列。
命令列解析:使用「Namedtuple」儲存解析的命令列參數,為輸入參數提供清晰的結構。
命名常數:「Namedtuple」可用來表示程式碼中的命名常數,從而提供一種清晰易讀的方式來定義常數值。
「Namedtuples」透過提供清晰度、可讀性和不可變性在這些場景中表現出色,使其成為簡明結構化資料的寶貴工具。
以上是使用Python命名元組增強程式碼清晰度的詳細內容。更多資訊請關注PHP中文網其他相關文章!