目錄
使用Python 命名元組增強程式碼清晰度
了解如何建立、解構和最佳化內存使用,以獲得更簡潔、更易讀的程式碼。探索實際範例和最佳實踐。
建立命名元組
從 Namedtuple 存取元素
不可變性
方法
解壓縮 Namedtuple
使用「Namedtuple」的優點
首頁 後端開發 Python教學 使用Python命名元組增強程式碼清晰度

使用Python命名元組增強程式碼清晰度

Jan 02, 2024 am 10:35 AM
python

Python 的集合模組有一個稱為「Namedtuple」的功能,「Namedtuple」是一個帶有命名元素的元組,使程式碼更具表現力。就像 Python 中的字典一樣,「Namedtuple」允許我們使用元組的成員而不是索引來存取元素。

使用Python命名元組增強程式碼清晰度

使用Python 命名元組增強程式碼清晰度

了解如何建立、解構和最佳化內存使用,以獲得更簡潔、更易讀的程式碼。探索實際範例和最佳實踐。

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 存取元素

「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')
登入後複製

解壓縮 Namedtuple

透過解包過程,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'}
登入後複製

使用「Namedtuple」的優點

可讀性:「Namedtuples」透過為元素提供有意義的名稱,使程式碼更具可讀性,從而消除了基於索引的存取的需要。

變:與常規元組一樣,「Namedtuples」是不可變的。一旦創建,其值就無法變更。

記憶體效率:「Namedtuples」具有記憶體效率,與等效類別相比,佔用的空間更少。請務必注意,使用 Namedtuples 獲得的記憶體效率在涉及大量實例的方案或處理大型資料集時更為常見。

輕量級資料結構: 非常適合建立簡單的類,而無需自訂方法。

資料儲存: 便於儲存結構化數據,尤其是在不需要完整類別的情況下。

API 和資料庫記錄: 用來表示從資料庫傳回的記錄或從 API 接收的資料。

Python 中的「Namedtuple」非常適合需要具有命名欄位的簡單、不可變資料結構的場景,例如

設定設定:使用「Namedtuple」表示帶有命名字段的配置設置,以便清晰易用。

資料庫記錄:「Namedtuple」可以表示資料庫記錄,明確哪個欄位對應於表中的哪一列。

命令列解析:使用「Namedtuple」儲存解析的命令列參數,為輸入參數提供清晰的結構。

命名常數:「Namedtuple」可用來表示程式碼中的命名常數,從而提供一種清晰易讀的方式來定義常數值。

「Namedtuples」透過提供清晰度、可讀性和不可變性在這些場景中表現出色,使其成為簡明結構化資料的寶貴工具。

#

以上是使用Python命名元組增強程式碼清晰度的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

C語言 sum 的作用是什麼? C語言 sum 的作用是什麼? Apr 03, 2025 pm 02:21 PM

C語言中沒有內置求和函數,需自行編寫。可通過遍歷數組並累加元素實現求和:循環版本:使用for循環和數組長度計算求和。指針版本:使用指針指向數組元素,通過自增指針遍歷高效求和。動態分配數組版本:動態分配數組並自行管理內存,確保釋放已分配內存以防止內存洩漏。

誰得到更多的Python或JavaScript? 誰得到更多的Python或JavaScript? Apr 04, 2025 am 12:09 AM

Python和JavaScript開發者的薪資沒有絕對的高低,具體取決於技能和行業需求。 1.Python在數據科學和機器學習領域可能薪資更高。 2.JavaScript在前端和全棧開發中需求大,薪資也可觀。 3.影響因素包括經驗、地理位置、公司規模和特定技能。

H5頁面製作是否需要持續維護 H5頁面製作是否需要持續維護 Apr 05, 2025 pm 11:27 PM

H5頁面需要持續維護,這是因為代碼漏洞、瀏覽器兼容性、性能優化、安全更新和用戶體驗提升等因素。有效維護的方法包括建立完善的測試體系、使用版本控制工具、定期監控頁面性能、收集用戶反饋和製定維護計劃。

distinctIdistinguish有關係嗎 distinctIdistinguish有關係嗎 Apr 03, 2025 pm 10:30 PM

distinct 和 distinguish 雖都與區分有關,但用法不同:distinct(形容詞)描述事物本身的獨特性,用於強調事物之間的差異;distinguish(動詞)表示區分行為或能力,用於描述辨別過程。在編程中,distinct 常用於表示集合中元素的唯一性,如去重操作;distinguish 則體現在算法或函數的設計中,如區分奇數和偶數。優化時,distinct 操作應選擇合適的算法和數據結構,而 distinguish 操作應優化區分邏輯效率,並註意編寫清晰可讀的代碼。

如何理解 C 語言中的 !x? 如何理解 C 語言中的 !x? Apr 03, 2025 pm 02:33 PM

!x 的理解!x 是 C 語言中的邏輯非運算符,對 x 的值進行布爾取反,即真變假,假變真。但要注意,C 語言中真假由數值而非布爾類型表示,非零視為真,只有 0 才視為假。因此,!x 對負數的處理與正數相同,都視為真。

C語言中 sum 是什麼意思? C語言中 sum 是什麼意思? Apr 03, 2025 pm 02:36 PM

C語言中沒有內置的sum函數用於求和,但可以通過以下方法實現:使用循環逐個累加元素;使用指針逐個訪問並累加元素;對於大數據量,考慮並行計算。

如何獲取58同城工作頁面上的實時申請和瀏覽人數數據? 如何獲取58同城工作頁面上的實時申請和瀏覽人數數據? Apr 05, 2025 am 08:06 AM

如何在爬蟲時獲取58同城工作頁面的動態數據?在使用爬蟲工具爬取58同城的某個工作頁面時,可能會遇到這樣�...

PS一直顯示正在載入是什麼原因? PS一直顯示正在載入是什麼原因? Apr 06, 2025 pm 06:39 PM

PS“正在載入”問題是由資源訪問或處理問題引起的:硬盤讀取速度慢或有壞道:使用CrystalDiskInfo檢查硬盤健康狀況並更換有問題的硬盤。內存不足:升級內存以滿足PS對高分辨率圖片和復雜圖層處理的需求。顯卡驅動程序過時或損壞:更新驅動程序以優化PS和顯卡之間的通信。文件路徑過長或文件名有特殊字符:使用簡短的路徑和避免使用特殊字符。 PS自身問題:重新安裝或修復PS安裝程序。

See all articles