命名元組nametuple

關于tuple的一些知識點

tuple的一些特性

  • 不可變性
  • 可迭代(iterable)當對象包含 __iter__或者 __getitem__ 就是可迭代對象
  • 拆包 (包含位置信息)
  • 不可變不是絕對的(當包含可變對象的時候,如列表)

tuple比list好的地方
tuple是不可變的,immutable的重要性

  • 性能優化:指元素全為immutable的tuple會作為常量在編譯的時候,因此產生了顯著地速度差異
  • 線程安全
  • 可以作為dict的key(immutable可哈希)
  • 拆包特性
user_tuple = ("hongshaorou", 26, 172)

name, *other = user_tuple

user_tuple = [1,2,3]

a, b, c = user_tuple

關于nametuple的知識點

# 我們是使用namedtuple生成類,而不是對象
from collections import namedtuple
# 生成類
User = namedtuple("User", ["name", "age", "height"])
# 根據類創建命名實例
user = User(name="hongshaorou", age=24, height=165)
#我們可以使用點獲得屬性值
print(user.age, user.name, user.height)

相當于 創建一個類

class User:
    def __init__(self, name, age, heught):
        pass

為什么我們不使用創建類的方式而是使用nametuple?

第一點: 使用nametuple簡潔
第二點: 使用nametuple節省空間,省了很多創建類的時候的內置變量

實例: user 表的數據全部取出然后加一個列

User = namedtuple("User", ["name", "age", "height", "edu"])
user_type = ("hongshaorou", 24, 165)
user = User(*user_type, "master")

user_dict = {
    "name": "hongshaorou",
    "age": 24,
    "height": 165
}

user = User(**user_dict, edu="master")

方法的使用

user_type = ("hongshaorou", 24, 165, "master")
user_list = ["hongshaorou", 24, 165, "master"]
user_dict = {
    "name": "hongshaorou",
    "age": 24,
    "height": 165,
    "edu": "master"
}

對于 _make()方法傳入的只要是可迭代對象都可以,但是傳入的數值個數必須和屬性值一致 當傳入字典的時候,不會有值

user = User._make(user_type)
user = User._make(user_list)
# user = User._make(user_dict)

因為nametuple繼承tuple 因此同意具有拆包的功能

name, age, *other = user

對于 _asdict 方法會將nametuple轉化為OrderDict

user_info_dict = user._asdict()

如果疑問錯誤請私信,運行結果暫時未給出,下篇將會在ipython環境下,運行結果一并顯示。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。