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
- namedtuple簡易實現
- 常用資料結構-namedtuple(命名元祖)資料結構
- 【python】python安裝Python
- python ----python的安裝Python
- python:python的多程式Python
- python--- 之The program 'python' can be found in the following packages: * python-minimal * python3PythonPackage
- Python IDLE和Python的區別!Python入門教程Python
- python學習之初識pythonPython
- 【Python】python類的繼承Python繼承
- Python 序列化(Python IO)Python
- Python合集之Python函式Python函式
- pythonPython
- python _Python
- python教程(一)·python環境搭建Python
- 學習Python的日子 Python(6)Python
- [python] Python型別提示總結Python型別
- Python補充02 Python小技巧Python
- 小白自學Python(一) -- Python教程Python
- Python之將Python字串生成PDFPython字串
- Python 字串格式化(Python IO)Python字串格式化
- Python 檔案讀寫(Python IO)Python
- 『python入門:』 python的介紹Python
- 與 Python 之父聊天:更快的 Python!Python
- python(python中的super函式、)Python函式
- python中#!/usr/bin/python與#!/usr/bin/env python的區別Python
- Python入門:Python 2與Python3有什麼區別?Python
- 學習Python選擇Python2還是Python3呢?Python
- Python學習筆記|Python之程式Python筆記
- Python 筆記-2-1-Python 概述Python筆記
- Python 微服務開發--Python Microservices DevelopmentPython微服務ROSdev
- python SQL基礎與python互動PythonSQL
- 「Python」Convert map object to numpy array in python 3PythonObject
- 【Python】阿里雲python sdk快速入門Python阿里
- Python - opencv-python 獲取影片尺寸PythonOpenCV
- Python基礎篇-Python基礎01Python
- Python基礎之Python資料世界Python