首頁  >  文章  >  後端開發  >  Python程式設計:詳解命名元組(namedtuple)的使用要點

Python程式設計:詳解命名元組(namedtuple)的使用要點

PHPz
PHPz轉載
2023-04-11 21:22:163376瀏覽

前言

本文繼續介紹Python集合模組,這次主要簡明扼要的介紹其內的命名元組,即namedtuple的使用。閒話少敘,我們開始-記得按讚、追蹤和轉發哦~ ^_^

創建命名元組

Python集合中的命名元組類namedTuples為元組中的每個位置賦予意義,並增強程式碼的可讀性和描述性。它們可以在任何使用常規元組的地方使用,並且增加了透過名稱而不是位置索引方式存取欄位的能力。其來自Python內建模組collections。其使用的常規語法方式為:

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

如果導入的方式不同,例如:import collections as cAlias、from collections import namedtuple、from collections import namedtupleTupas namedtuple、from collections import namedtupleTupas namedtuple、from collections import namedtupleTupas namedtuple、from collections import namedtupleTupas Namedtuple、from collections import namedtupleTupas Nameddtuple、fromle等形式可以對應為:

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

其中:

參數typename:為傳回的新元組子類別XxNamedTuple指定一個字串型類別名稱。新的子類別用於建立類似元組的對象,所建立的對象具有可透過屬性查找、位置索引以及迭代的方式來存取的相關欄位。子類別的實例還有一個有用的文檔字串(相當於幫助文檔,帶有typename和field_names)和一個有用的__repr__()方法,該方法以名稱=值的格式列出元組內容。

參數field_names:是通常是字串序列,如[' x ', ' y ']。作為可選方式,field_names也可以是一個字串,但包含的對應欄位名稱是用空格和/或逗號分隔,例如' x y '或' x, y '。

任何有效的Python標識符都可以用作命名字段名稱,但不能以下劃線(_)開始。有效的識別字包括字母、數字和底線,但不要以數字或底線開始,不能使用關鍵字,如class、return、global、pass或raise等。

為了理解NamedTuple是如何運作的,我們假設有一個Employee對象,其擁有id、name和age屬性。請看程式碼範例清單:

Python程式設計:詳解命名元組(namedtuple)的使用要點

執行程式輸出結果類似如下:

Employee(, name='Solo Cui ', age='18')
按索引方式访问Employee的名子为 : Solo Cui
Employee(, name='Annie Kent', age='26')
按键(字段名)访问Employee的名子为 : Annie Kent

另外,建立命名元組的函數中其它幾個參數用的少,這裡僅作簡單介紹:

參數rename:如果rename為true,無效的欄位名稱將自動替換為位置名稱。例如,['abc', 'def', 'ghi', 'abc']被轉換為['abc', '_1', 'ghi', '_3'],消除了關鍵字def和重複的字段名abc。

參數defaults:可以是None或預設值的可迭代物件。由於具有預設值的欄位必須出現在任何沒有預設值的欄位之後,因此預設值會套用到最右邊的參數,依序向左。例如,如果欄位名稱是['x', 'y', 'z'],預設值是(1,2),那麼x將是一個必需的參數,y將預設值為1,z將預設值為2。

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

命名元組實例沒有為每個實例單獨使用字典,所以它們是輕量級的,不需要比常規元組更多的記憶體。

命名元組特定方法

除了從元組繼承的方法之外,命名元組還支援另外三個方法和兩個屬性。為了防止與欄位名稱發生衝突,方法和屬性名稱以下劃線開頭。分別介紹如下:

1)_make(iterable):

類別方法,從現有序列或可迭代物件產生新實例。程式碼範例如下:

Python程式設計:詳解命名元組(namedtuple)的使用要點

輸出結果類似如下:

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

2)_asdict ():

##返回一個新的字典,它將字段名映射到對應的值。範例程式碼如下:

Python程式設計:詳解命名元組(namedtuple)的使用要點

輸出結果類似如下:

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

3)_replace (**kwargs):

傳回一個命名元組的新實例,用新值取代指定欄位。程式碼範例如下:

Python程式設計:詳解命名元組(namedtuple)的使用要點

輸出結果如下:

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

4)_fields:

以字串元群組方式列出欄位名的。用於自省和從現有的命名元組建立新的命名元組類型。範例程式碼如下:

Python程式設計:詳解命名元組(namedtuple)的使用要點

輸出結果為:

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

我们可以使用_fields属性从现有的命名元组中创建新的命名元组。示例如下:

Python程式設計:詳解命名元組(namedtuple)的使用要點

输出结果类似如下:

Pixel(x=5, y=8, red=128, green=255, blue=0)

结果的实体性赋值

这里所说的实体,类似Java中的数据实体对象——只有简单的属性字段。而命名元组在为csv或sqlite3模块操作而返回的元组结果分配给对应字段名而装配成简单实体时特别有用,自动进行字段的对应赋值。比如在当前Python程序位置有个employees.csv,其包含内容如下:

张三,26,工程师,开发部,中级
李四,32,项目经理,项目部,高级

通过示例,我们来完成Employee实体的命名元组的自动装配,代码示例如下:

Python程式設計:詳解命名元組(namedtuple)的使用要點

输出结果类似如下:

张三 工程师 26 开发部 中级
李四 项目经理 32 项目部 高级

再简单地来个数据库操作和装配实体的示例,代码清单如下:

Python程式設計:詳解命名元組(namedtuple)的使用要點

我这里只是简单的创建了数据库并创建表,然后插入一条数据,再查询并完成命名元组的实体化装配和结果输出。

运行输出结果如下:

王武 经理

本文小结

本文主要介绍了Python自带集合模块中的命名元组(namedtuple)的使用,即可以当做一般的元组使用,由可基于字段名的方式访问元组值,并介绍了命名元组内部扩展的几个方法和和属性的应用示例。最后还介绍了基于命名元组的实体化封装应用。基于代码示例进行介绍,这样便于你动手实践,以便更好地掌握和理解。

以上是Python程式設計:詳解命名元組(namedtuple)的使用要點的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:51cto.com。如有侵權,請聯絡admin@php.cn刪除