Python中比元组更好用的namedtuple
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                Python中比元组更好用的namedtuple
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                1.什么是元組?
- 不可變的序列類型
- “不能修改的列表”
2.元組支持哪些操作?
元組是序列類型,支持序列類型的所有操作
通過索引取值
one_tuple = ("可優", 17, "男", "coding", "Never Stop Learning!") one_tuple[-1]切片操作
one_tuple = ("可優", 17, "男", "coding", "Never Stop Learning!") one_tuple[3:5]成員操作(in 或者 not in)
one_tuple = ("可優", 17, "男", "coding", "Never Stop Learning!") "可優" in one_tuple連接操作(+)
one_tuple = ("可優", 17, "男", "coding", "Never Stop Learning!") two_tuple = ("That is really right!", ) one_tuple + two_tuple重復操作符(*)
one_tuple = ("可優", 17, "男", "coding", "Never Stop Learning!") one_tuple * 2遍歷(for)
one_tuple = ("可優", 17, "男", "coding", "Never Stop Learning!") for value in one_tuple:print(value)求長度(len)
one_tuple = ("可優", 17, "男", "coding", "Never Stop Learning!") len(one_tuple)其他內置函數(all、any、max、min、list、tuple、enumerate、sorted等)
元組有什么缺點(痛點)?
最大的痛點是只能通過數字索引來取值
 當元組中元素非常大時,通過索引取值非常不方便,內存消耗也大
命名元組(namedtuple)
1.定義
使用命名元組的步驟:
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' # 將元組封裝為一個類,可以通過字段名(屬性名)來訪問元組中的值 # 支持元組的所有操作 from collections import namedtuple# 1、定義一個類 Love = namedtuple("Love", "name gender age love_into hobby motto")# 2、創建對象 keyou = Love("可優", "帥男", 17, "Lemon little girl", "Coding", "Never Stop Learning!")# 3、獲取命名元組的值 print(keyou[1]) # 支持元組的索引取值 print(keyou[-2:]) # 支持切片 print(keyou.name) # 支持通過字段名來取值定義命名元組類的三種方法以及rename和defaults參數:
from collections import namedtuple# 1、定義一個類 # 方法一,傳遞屬性名之間以空格間隔的一個字符串 Love = namedtuple("Love", "name gender age love_into hobby motto")# 方法二,也可以以英文逗號來分隔每一個屬性名 Love = namedtuple("Love", "name,gender,age,love_into,hobby,motto")# 方法三,傳遞一個由屬性名組成的序列類型(列表、元組) fields = ["name", "gender", "age", "love_into", "hobby", "motto"] Love = namedtuple("Love", fields)# 說明: # 屬性名要符合標識符的命名規范 # 只能由數字、字母、下劃線組成 # 不能以數字開頭 # 不能與關鍵字、系統函數或類重名 # 如果屬性名,不符合這些規范會報錯嗎? 會報錯 fields = ["1name", "class", "def", "love_into", "hobby", "motto"] Love = namedtuple("Love", fields)# 如果傳了一個不符合規范的屬性名,又不想讓它報錯呢? 可以做到的 # 將rename參數設置為True,當屬性名不符合規范時,會自動幫我們將不符合規范的屬性名改為下劃線加數字索引值 fields = ["1name", "class", "def", "love_into", "hobby", "motto"] Love = namedtuple("Love", fields, rename=True)# 如果某些屬性有默認值呢? 如何設置? # 可以設置defaults參數,為一個序列類型 # 以從右到左的順序來為屬性賦默認值 fields = ["1name", "class", "def", "love_into", "hobby", "motto"] Love = namedtuple("Love", fields, rename=True, defaults=["Coding", "Never Stop Learning!"])# 2、創建對象 # keyou = Love("可優", "帥男", 17, "Lemon little girl", "Coding", "Never Stop Learning!") # 由于hobby和motto這兩個屬性已經有默認值了,所有可以不用傳這兩個參數 keyou = Love("可優", "帥男", 17, "Lemon little girl")# 3、獲取命名元組的值 print(keyou[1]) # 支持元組的索引取值 print(keyou[-2:]) # 支持切片 # print(keyou.1name) # 支持通過字段名來取值 print(keyou._0) # 支持通過字段名來取值2.創建
創建對象的兩種方式:
# 創建對象的方式 from collections import namedtuple ''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! '''# 1、定義一個類 Love = namedtuple("Love", "name gender age love_into hobby motto")# 2、創建對象 # 方法一,調用構造器來創建對象 keyou = Love("可優", "帥男", 17, "Lemon little girl", "Coding", "Never Stop Learning!")# 方法二,使用_make方法來創建對象 one_person_value = ["可優", "帥男", 17, "Lemon little girl", "Coding", "Never Stop Learning!"] # 任何一個序列類型都行 keyou = Love._make(one_person_value)# 3、獲取命名元組的值 print(keyou[1]) # 支持元組的索引取值 print(keyou[-2:]) # 支持切片 print(keyou.name) # 支持通過字段名來取值3.取值
獲取命名元組中的元素的三種方式:
# 獲取命名元組中的元素的方法 from collections import namedtuple# 1、定義一個類 Love = namedtuple("Love", "name gender age love_into hobby motto")# 2、創建對象 one_person_value = ["可優", "帥男", 17, "Lemon little girl", "Coding", "Never Stop Learning!"] # 任何一個序列類型都行 keyou = Love._make(one_person_value)# 3、獲取命名元組的值 # 方法一,通過索引取值,也可以通過切片取值 print(keyou[1]) # 支持元組的索引取值 print(keyou[-2:]) # 支持切片# 方法二,通過字段名來取值 print(keyou.name)# 方法三,通過getattr來取值 print(getattr(keyou, 'gender'))4.其他操作
命名元組支持的其他操作:
_asdict方法 _replace方法 _fields屬性 _field_defaults屬性 ''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' # 命名元組支持的其他操作from collections import namedtuple# 1、定義一個類 fields = ["name", "age", "gender", "love_into", "hobby", "motto"] Love = namedtuple("Love", fields, rename=True, defaults=["Coding", "Never Stop Learning!"])# 2、創建對象 one_person_value = ["可優", "帥男", 17, "Lemon little girl", "Coding", "Never Stop Learning!"] # 任何一個序列類型都行 keyou = Love._make(one_person_value)# 3、獲取命名元組的值 # 方法一,通過索引取值,也可以通過切片取值 # print(keyou[1]) # 支持元組的索引取值 # print(keyou[-2:]) # 支持切片# 方法二,通過字段名來取值 # print(keyou.name)# 方法三,通過getattr來取值 # print(getattr(keyou, 'gender'))# 4、其他操作 # _asdict方法,將元組轉化為字典 one_dict = keyou._asdict() print(dict(one_dict))# _replace方法,修改元組中的值,會創建一個新元組,之前的元組未修改 print("keyou的名牌號為:{}".format(id(keyou))) new_keyou = keyou._replace(age=16) print("new_keyou的值為:{}\n新門牌號為:{}\n".format(new_keyou, id(new_keyou)))# _fields,獲取命名元組的所有屬性名 print(keyou._fields)# _field_defaults,獲取命名元組的所有屬性默認值 print(keyou._fields_defaults)5.應用場景
將測試數據從Excel(csv、json、數據庫)中讀取出來,在Python中處理時,往往可以使用namedtuple來承載數據需要使用元組來處理數據的所有場景都可以
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的Python中比元组更好用的namedtuple的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: python 中文件输入输出及os模块对
- 下一篇: Python实现im2col和col2i
