Python基础教程:为元组中的每一个元素命名

枫铃3年前 (2021-09-30)Python243

1.原因:

当存储一个学生信息的时候使用字典是十分方便的,例如下面这样:

student = {
    'name' : "小明",
    'sex' : 'Man',
    'tel' : '123456',
    'score' : 100,
    'address' : 'xxxx'
}

因为这样可以很直观的显示出一个学生的各个信息,但是当有很多学生的时候使用元组是不是可以更简单呢?我们只需要将所有的元组元素使用相同的排列方式,例如:

s1 = ('小明', 'Man', '123456', 100, 'xxxx')

第一个元素表示名字,第二个元素表示性别,第三个元素表示电话号码,第四个元素表示分数,第五个元素表示地址.最重要的是在存储的时候元组占用的存储空间比字典少.所以当有大量数据的时候使用元组会节省大量的空间.

但是这样的话就会出现一个问题:在访问元组属性上的时候我们使用类似于s1[0],s1[2]……这些我们自己知道表示的是姓名和电话号码,但是其他阅读你代码的人知道吗?所以我们可以给元组的元素命名,这样的话就能十分直观的让阅读代码的人知道我们调用的是哪一个“属性”.

2.方法一:使用collections.namedtuple代替内置的tuple

话不多说,我们直接上代码:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# 导入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)

注释:
新的访问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………但是我为什么没有讲,我聪明如你只需要稍加思考就知道为啥了.

相关文章

上千个电脑文件怎么搬?用Python一键复制移动

上千个电脑文件怎么搬?用Python一键复制移动

今天,,教大家炫(zhuang)技(b)于无形,展示你的Py...

Python强大的格式化format

'{0},{1}'.format('kzc',18) 'kzc,18' '{},{}'....

inspect模块---检查活动对象

[inspect]模块提供了一些有用的函数来帮助获取有关活动对象(如模块,类,方法,函数,...

Python处理正则表达式超时的办法

最近在项目中遇到一个问题,就是需要采用正则匹配一些疑似暗链和挂马的HTML代码,而公司的老大给的正则表达式有的地方写的不够严谨&#...

python函数默认参数作用域

当def函数参数默认值为...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。