nametuple() 是具備命名字段的元組的工廠函數sql
命名元組爲元組中每一個位置賦予含義,並容許更具可讀性的自編寫代碼 ide
它們能夠在任何使用常規元組的地方使用,而且他們添加了按名稱而不是位置索引訪問字段的功能。函數
用法:spa
collections.namedtuple(typename, field_names, *, verbose=False, rename=False, module=None)3d
返回名爲typename的新元組子類。 新的子類用於建立相似元組的對象,這些對象具備能夠經過屬性查找訪問的字段以及可索引和可迭代的字段。 子類的實例也有一個有用的docstring(帶有typename和field_names)和一個有用的__repr __()方法,它以name = value格式列出元組內容。
code
field_names是單個字符串,每一個字段名由"空格"和"/"或"逗號"分隔,例如'x y'或'x,y'。或者,field_names 能夠是一系列字符串,例如['x', 'y']。orm
任何有效的Python標識符均可以用於字段名稱,除了如下劃線開頭的名稱外。 sqlite
有效標識符由字母,數字和下劃線組成,但不以數字或下劃線開頭,而且不能是關鍵字,例如:class,for,return,global,pass或raise。對象
若是 rename 爲true,則無效的字段名會自動替換爲位置名稱。 blog
例如,將['abc','def','ghi','abc']轉換爲['abc','_1','ghi','_3'],從而消除關鍵字def和重複字段名abc。
若是verbose爲true,則在構建類定義以後打印它。 此選項已過期; 相反,打印_source屬性更簡單。
若是定義了module,則將命名元組的__module__屬性將設置爲該值。
命名的元組實例沒有每一個實例的字典,所以它們是輕量級的,而且不須要比常規元組佔用更多的內存。
在版本3.1中更改:添加了對rename的支持。
在版本3.6中更改:verbose 和 rename 參數成爲 keyword-only 參數。
在版本3.6中更改:添加了module參數。
命名元組對於將字段名稱分配給由csv或sqlite3模塊返回的結果元組特別有用:
除了從元組繼承的方法外,命名元組還支持三個額外的方法和兩個屬性。爲防止與字段名稱衝突,方法和屬性名稱如下劃線開頭。
(1)classmethod
somenamedtuple.
_make
(iterable)
從現有序列生成新實例或可迭代的類方法。
somenamedtuple._asdict()
返回一個新的OrderedDict,它將字段名稱映射到它們對應的值:
somenamedtuple._replace(**kwargs)
返回指定元組的新實例,用新值替換指定字段:
somenamedtuple._source
帶有純Python源代碼的字符串,用於建立命名元組類。 源使得命名元組自我記錄。 它能夠打印,使用exec()執行,或保存到文件並導入。
somenamedtuple._fields
列出字段名稱的字符串元組。 用於內省和從現有命名元組中建立新的命名元組類型。
要檢索名稱存儲在字符串中的字段,請使用getattr( )函數:
要將字典轉換爲命名元組,請使用double-star-operator(雙星運算符)(如解包參數列表中所述):
因爲命名元組是常規的Python類,所以可使用子類輕鬆添加或更改功能。如下是如何添加計算字段和固定寬度打印格式的方法:
上面顯示的子類將__slots__設置爲一個空元組。 這有助於防止建立實例字典,從而下降內存需求。
子類化對於添加新的存儲字段沒有用處。
相反,只需從_fields屬性建立一個新的命名元組類型:
能夠經過直接分配__doc__字段來自定義文檔字符串:
可使用_replace()來自定義原型實例來實現默認值: