為元組中的每一個元素命名
1. 原因:
當存儲一個學生信息的時候使用字典是十分方便的,例如下面這樣:
student = { 'name' : "小明", 'sex' : 'Man', 'tel' : '123456', 'score' : 100, 'address' : 'xxxx' }
因為這樣可以很直觀的顯示出一個學生的各個信息,但是當有很多學生的時候使用元組是不是可以更簡單呢?我們只需要將所有的元組元素使用相同的排列方式,例如:
s1 = ('小明', 'Man', '123456', 100, 'xxxx')
第一個元素表示名字,第二個元素表示性別,第三個元素表示電話號碼,第四個元素表示分數, 第五個元素表示地址.最重要的是在存儲的時候元組佔用的存儲空間比字典少.所以當有大量數據的時候使用元組會節省大量的空間.
但是這樣的話就會出現一個問題:在訪問元組屬性上的時候我們使用類似於s1[0], s1[2].....這些我們自己知道表示的是姓名和電話號碼,但是其他閱讀你代碼的人知道嗎?所以我們可以給元組的元素命名,這樣的話就能十分直觀的讓閱讀代碼的人知道我們調用的是哪一個"屬性".
2. 方法一: 使用collections.namedtuple代替內置的tuple
話不多說,我們直接上代碼:
# 導入namedtuple from collections import namedtuple # 創建一個學生"類",名字叫student student = namedtuple('stduent', ['name', 'sex', 'tel', 'score', 'address']) # 創建一個namedtuple對象 s = student('小明', 'Man', '123456', 100, 'xxxx') # 查看創建的對象 print(s) # 判斷對象的類型是不是tuple print(isinstance(s, tuple)) # 嘗試使用字典的方式調用對象屬性 print(s.name) print(s.sex) print(s.tel) print(s.score) print(s.address)
注釋:
1. 新的訪問namedtupyle元素的方式不再是以前的s[0],s[1].....而是在對象後面更屬性名(這也是為什麼我喜歡稱他們為類,對象,和屬性)
輸出結果:
stduent(name='小明', sex='Man', tel='123456', score=100, address='xxxx') True 小明 Man 123456 100 xxxx
3. 方法二: 使用枚舉類型:
原本的元組可讀性差的原因在于不知道元素順序表示的含義的時候很難通過數字判斷,所以我們可以使用枚舉類型來代替原本屬性調用時候的數字.
具體請看代碼:
# 導入整數枚舉 from enum import IntEnum # 創建整數枚舉類型 class st(IntEnum): name = 0 sex = 1 tel = 2 score = 3 address = 4 s = ('小明', 'Man', '123456', 100, 'xxxx') # 元素調用 print(s[st.name], s[st.sex], s[st.address], s[st.tel], s[st.score], s[st.address])
輸出:
小明 Man xxxx 123456 100 xxxx
這也算是一種很直觀的方式了,還有一種更簡單粗暴的,那就是只給讓那些數字擁有意義:創建變量name = 0, sex = 1........但是我為什麼沒有講,我聰明如你只需要稍加思考就知道為啥了.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用