collections 中的namedtuple

文章目錄

    • namedtuple 基本用法
    • namedtuple特性
      • _make(iterable)
      • _asdict()
      • _replace(**kwargs)
      • _fields
      • _fields_defaults
    • 參考:

namedtuple 基本用法

Tuple還有一個兄弟,叫namedtuple。雖然都是tuple,但是功能更為強大。對于namedtuple,你不必再通過索引值進行訪問,你可以把它看做一個字典通過名字進行訪問,只不過其中的值是不能改變的。

from collections import namedtuple
Animal = namedtuple('Animal', 'name age type')
perry = Animal(name="perry", age=31, type='cat')
print(perry)
print(perry.name)
# Animal(name='perry', age=31, type='cat')
# perry

為了構造一個namedtuple需要兩個參數,分別是tuple的名字和其中域的名字。比如在上例中,tuple的名字是“Animal”,它包括三個域,分別是“name”、“age”和“type”。

Namedtuple比普通tuple具有更好的可讀性,可以使代碼更易于維護。同時與字典相比,又更加的輕量和高效。

  • 但是有一點需要注意,就是namedtuple中的屬性都是不可變的。任何嘗試改變其屬性值的操作都是非法的。
  • Namedtuple還有一個非常好的一點是,它與tuple是完全兼容的。也就是說,我們依然可以用索引去訪問一個namedtuple。

namedtuple特性

具名元組(namedtuple)除了擁有繼承自基本元組的所有方法之外,還提供了額外的三個方法和兩個屬性,為了防止命名沖突,這些方法都會以下劃線開頭。

_make(iterable)

這是一個類函數,參數是一個迭代器,可以使用這個函數來構建具名元組實例

Point = namedtuple('Point', ['x', 'y'])
t = [11, 22]
print(Point._make(t))
#Point(x=11, y=22)

_asdict()

實例方法,根據具名元組的名稱和其元素值,構建一個OrderedDict返回。

Point = namedtuple('Point', ['x', 'y'])
p =Point(x=11, y=22)
print(p._asdict())
#OrderedDict([('x', 11), ('y', 22)])

_replace(**kwargs)

實例方法,根據傳入的關鍵詞參數,替換具名元組的相關參數,然后返回一個新的具名元組,注意這里的拷貝方式。

Point = namedtuple('Point', ['x', 'y'])
p = Point(x=11, y=22)
print(p._replace(x=33))
print(p)
#Point(x=33, y=22)
#Point(x=11, y=22)

_fields

這是一個實例屬性,存儲了此具名元組的元素名稱元組,在根據已經存在的具名元組創建新的具名元組的時候使用

Point = namedtuple('Point', ['x', 'y'])
p = Point(x=11, y=22)
print(p._fields)Color = namedtuple('Color', 'red green blue')
Pixel = namedtuple('Pixel', Point._fields + Color._fields)
print(Pixel(11, 22, 128, 255, 0))# ('x', 'y')
# Pixel(x=11, y=22, red=128, green=255, blue=0)

_fields_defaults

查看具名元組類的默認值

參考:

(1)https://baijiahao.baidu.com/s?id=1613589944704758634&wfr=spider&for=pc(Python進階之路:namedtuple

(2). https://www.jianshu.com/p/60e6484a7088(namedtuple工廠函數精講

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/273811.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/273811.shtml
英文地址,請注明出處:http://en.pswp.cn/news/273811.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

abap 中modify 的使用

1、modify table itab from wa Transporting f1 f2 ... 表示表itab中符合工作區wa 中關鍵字的一條數據的 f1 f2字段會被wa中對應的字段值更新。 modify用于更新和新增數據,當表中沒有數據時就新增,有就修改。 2、在使用binary search 時一定要先排序&am…

python[進階] 6.使用一等函數實現設計模式

文章目錄6.1.1 經典的“策略”模式6.1.2 使用函數實現“策略”模式6.1.3 選擇最佳策略:簡單的6.1.4 找出模塊中的全部6.2 “命令”模式6.1.1 經典的“策略”模式 為抽象基類(Abstract Base Class,ABC),這么做是為了使…

2014阿里巴巴校園招聘筆試題 - 中南站

轉載于:https://www.cnblogs.com/gotodsp/articles/3530329.html

python中一些特殊方法的作用

我們先暫且稱呼為特殊方法。 單下劃線開頭(_foo)雙下劃線開頭的(__foo)雙下劃線開頭和結尾的( __foo__)代表不能直接訪問的類屬性,需通過類提供的接口進行訪問,不能用“from xxx im…

Spring的IOC原理[通俗解釋一下]

1. IoC理論的背景 我們都知道,在采用面向對象方法設計的軟件系統中,它的底層實現都是由N個對象組成的,所有的對象通過彼此的合作,最終實現系統的業務邏輯。 圖1:軟件系統中耦合的對象 如果我們打開機械式手表的后蓋&am…

python爬蟲面試遇到的問題

文章目錄1python基礎1.1 列表生成式和生成器的區別 ?1.2 如何不用任何循環快速篩掉列表中的奇數元素 ?1.3 map和reduce的用法1.4 裝飾器的作用1.5 Python中__new__與__init方法的區別1.6 python中的設計模式1.7 lambda函數,以及它…

ubuntu18 常用命令

文章目錄卸載和安裝卸載和安裝 1.打開一個終端,輸入dpkg --list ,按下Enter鍵,終端輸出以下內容,顯示的是你電腦上安裝的所有軟件。 2.安裝 dpkg –i name.deb 安裝一個 deb 包;在終端上輸入命令sudo apt-get --purge remove 包…

以嵌入式系統設計師考試成績,開始嵌入式博客之旅

http://www.rkb.gov.cn/jsj/cms/s_contents/download/s_dt201003110106.html 轉載于:https://www.cnblogs.com/yueqian-scut/p/3952268.html

SSH框架配置及Maven使用

1.SSH框架配置 1.1. SSH框架介紹 1.2. SSH框架配置 所需資源下載: l jdk; 從Oracle官方網站:http://www.oracle.com/technetwork/cn/java/javase/downloads/index.html下載jdk,win7是默認安裝在C:\Program Files (x86)\Java\jdk1.6.0_25路徑下…

cookie,session的區別和聯系(補充token)

文章目錄1 http為什么是無狀態的2 cookie 和session 的區別詳解3 token參考:備注: 博客文章僅限于學習,禁止商用1 http為什么是無狀態的 2 cookie 和session 的區別詳解 這些都是基礎知識,不過有必要做深入了解。先簡單介紹一下。 二者的定…

庫函數和系統調用的區別

前言 這是一對非常容易混淆的概念。對于用戶( 應用程序開發者 )來說,并不一定要嚴格區分其意義。因為在用戶看來,它們都是以C函數的形式出現的。但了解二者的區別對我們掌握整個計算機系統有很大幫助。 區別 1. 一部分庫函數實現需要使用系統調用( 如 pr…

Flask 從入門到熟悉(不敢稱為精通)

文章目錄2.1 Flask介紹及其安裝2.2 Virtualenv3.1 一個最小的應用3.2 外部課件服務器3.3 調試模式4.1 路由介紹4.2 變量規則4.3 構建URL4.4 HTTP 方法4 總結5.1 靜態文件5.2 渲染模板5.3 練習66.1 接收請求數據6.2 請求對象6.3 文件上傳6.4 Cookies6 總結77.1 重定向和錯誤7.2 …

Ext JS 5 beta版發布

原文:Announcing Public Beta of Ext JS 5我們非常高興的宣布,Sencha Ext JS 5 beta版本開始進行公測了。這個beta版本可以讓你、我們Sencha社區來對我們的Ext JS 5的工作進度進行評測。對于所以Ext JS開發人員,這事一個很好的機會來協助完成…

算法【二分查找】(數組)

1 .山脈數組的巔峰索引 信息 我們把符合下列屬性的數組 A 稱作山脈&#xff1a; A.length > 3 存在 0 < i < A.length - 1 使得A[0] < A[1] < … A[i-1] < A[i] > A[i1] > … > A[A.length - 1] 給定一個確定為山脈的數組&#xff0c;返回任何滿…

關于癌癥的十大謠言

最近&#xff0c;國外網站總結了西方社會中流行的十個關于癌癥的謠言&#xff0c;其中很多謠言在我們周圍也有廣泛的傳播。 謠言1&#xff1a;癌癥是人為導致的現代疾病 或許在公眾的認知里&#xff0c;癌癥在今天要比歷史上任何時期都重要。不過實際上&#xff0c;癌癥可不是一…

[python 進階] 第7章 函數裝飾器和閉包

文章目錄7.1 裝飾器基礎知識7.2 Python何時執行裝飾器7.3 使用裝飾器改進“策略”7.4 變量作用域(global)備注 -比較字節碼&#xff08;暫略&#xff09;7.5 閉包7.6 nonlocal聲明global和nonlocal的區別7.7 實現一個簡單的裝飾器7.8 標準庫中的裝飾器7.8.1 使用functools.lru_…

自制“低奢內”CSS3登入表單,包含JS驗證,請別嫌棄哦。

要求 必備知識 基本了解CSS語法,初步了解CSS3語法知識。和JS/JQuery基本語法。 開發環境 Adobe Dreamweaver CS6 演示地址 演示地址 預覽截圖(抬抬你的鼠標就可以看到演示地址哦): 制作步驟: 一, html結構 <div id"home"><form id"login" class…

class里面只能寫以下5種

轉載于:https://www.cnblogs.com/phplearnings/p/3650849.html

【排序】算法(python實現)

文章目錄python 排序算法1 插入排序1.1 直接插入排序算法思想1.2 希爾排序算法思想2. 選擇排序2.1 簡單選擇排序2.2 堆排序參考python 排序算法 1 插入排序 1.1 直接插入排序 算法思想 直接插入排序的核心思想就是&#xff1a;將數組中的所有元素依次跟前面已經排好的元素相…

OpenSSL漏洞補救辦法詳解(轉)

CVE-2014-0160漏洞背景 2014年4月7日OpenSSL發布了安全公告&#xff0c;在OpenSSL1.0.1版本中存在嚴重漏洞(CVE-2014-0160)。OpenSSL Heartbleed模塊存在一個BUG&#xff0c;問題存在于ssl/dl_both.c文件中的心跳部分&#xff0c;當攻擊者構造一個特殊的數據包&#xff0c;滿足…