Python namedtuple
Python元組的升級版本 -- namedtuple(具名元組)
因為元組的侷限性:不能為元組內部的資料進行命名,所以往往我們並不知道一個元組所要表達的意義,所以在這裡引入了 collections.namedtuple 這個工廠函式,來構造一個帶欄位名的元組。具名元組的例項和普通元組消耗的記憶體一樣多,因為欄位名都被存在對應的類裡面。這個類跟普通的物件例項比起來也要小一些,因為 Python 不會用 __dict__ 來存放這些例項的屬性。
namedtuple 物件的定義如以下格式:
collections.namedtuple(typename, field_names, verbose=False, rename=False)
返回一個具名元組子類 typename,其中引數的意義如下:
- typename:元組名稱
- field_names: 元組中元素的名稱
- rename: 如果元素名稱中含有 python 的關鍵字,則必須設定為 rename=True
- verbose: 預設就好
下面來看看宣告一個具名元組及其例項化的方法:
import collections
# 兩種方法來給 namedtuple 定義方法名
# User = collections.namedtuple('User', ['name', 'age', 'id'])
User = collections.namedtuple('User', 'name age id')
user = User('tester', '22', '464643123')
print(user) # User(name='tester', age='22', id='464643123')
print(user.name) # tester
print(user.id) # 464643123
print(user.age) # 22
collections.namedtuple('User', 'name age id') 建立一個具名元組,需要兩個引數,一個是類名,另一個是類的各個欄位名。後者可以是有多個字串組成的可迭代物件,或者是有空格分隔開的欄位名組成的字串(比如本示例)。具名元組可以通過欄位名或者位置來獲取一個欄位的資訊。
輸出結果:
User(name='tester', age='22', id='464643123')
tester
464643123
22
具名元組的特有屬性:
類屬性 _fields:包含這個類所有欄位名的元組
類方法 _make(iterable):接受一個可迭代物件來生產這個類的例項
例項方法 _asdict():把具名元組以 collections.OrdereDict 的形式返回,可以利用它來把元組裡的資訊友好的展示出來
from collections import namedtuple
# 定義一個namedtuple型別User,幷包含name,sex和age屬性。
User = namedtuple('User', ['name', 'sex', 'age'])
# 建立一個User物件
user = User(name='Runoob', sex='male', age=12)
# 獲取所有欄位名
print( user._fields )
# 也可以通過一個list來建立一個User物件,這裡注意需要使用"_make"方法
user = User._make(['Runoob', 'male', 12])
print( user )
# User(name='user1', sex='male', age=12)
# 獲取使用者的屬性
print( user.name )
print( user.sex )
print( user.age )
# 修改物件屬性,注意要使用"_replace"方法
user = user._replace(age=22)
print( user )
# User(name='user1', sex='male', age=21)
# 將User物件轉換成字典,注意要使用"_asdict"
print( user._asdict() )
# OrderedDict([('name', 'Runoob'), ('sex', 'male'), ('age', 22)])
以上例項輸出結果為:
('name', 'sex', 'age') User(name='Runoob', sex='male', age=12) Runoob male 12 User(name='Runoob', sex='male', age=22) OrderedDict([('name', 'Runoob'), ('sex', 'male'), ('age', 22)])
相關文章
- python技巧 namedtuplePython
- Python namedtuple使用Python
- Python的defaultdict模組和namedtuple模組Python
- namedtuple簡易實現
- 常用資料結構-namedtuple(命名元祖)資料結構
- 【python】python安裝Python
- 【Python】Python使用redisPythonRedis
- Python 之父談 PythonPython
- 【Python】python練習Python
- 【Python】python 日期操作Python
- python ----python的安裝Python
- python:python的多程式Python
- 【Python】Python連線mysqlPythonMySql
- Python 3 能振興 PythonPython
- 【Python】Python安裝模組Python
- 【python】python APScheduler 框架Python框架
- python學習之初識pythonPython
- Python 序列化(Python IO)Python
- Python合集之Python函式Python函式
- 【Python】python類的繼承Python繼承
- 小白自學Python(一) -- Python教程Python
- 為Python加速 - python+memcachedPython
- Python 3 正在毀滅 PythonPython
- Python補充06 Python之道Python
- [python]python錯誤集錦Python
- Python list of class attributes - PythonPython
- 【python】Python 3 的新特性Python
- python--- 之The program 'python' can be found in the following packages: * python-minimal * python3PythonPackage
- python _Python
- PythonPython
- Python IDLE和Python的區別!Python入門教程Python
- Python補充02 Python小技巧Python
- Python 字串格式化(Python IO)Python字串格式化
- Python 檔案讀寫(Python IO)Python
- Python之將Python字串生成PDFPython字串
- python教程(一)·python環境搭建Python
- 小白自學Python(五)Python運算子Python
- 小白自學Python(六)Python字串(上)Python字串