效果好的网站建设公,搜索引擎关键词的工具,旅游电子商务 网站建设,我是做性视频网站#x1f4da;引言 #x1f64b;♂️作者简介#xff1a;生鱼同学#xff0c;大数据科学与技术专业硕士在读#x1f468;#x1f393;#xff0c;曾获得华为杯数学建模国家二等奖#x1f3c6;#xff0c;MathorCup 数学建模竞赛国家二等奖#x1f3c5;#xff0c…
引言 ♂️作者简介生鱼同学大数据科学与技术专业硕士在读曾获得华为杯数学建模国家二等奖MathorCup 数学建模竞赛国家二等奖亚太数学建模国家二等奖。 ✍️研究方向复杂网络科学 兴趣方向利用python进行数据分析与机器学习数学建模竞赛经验交流网络爬虫等。 在我们学习python的过程中对元组的介绍通常是成为”不可变的列表“但是这其实并没有完全的概括元组的功能。在本文中我们将会介绍元组作为记录的功能话不多说我们开始吧。
元组作为没有字段名的记录
元组中的每个元素其实都存储了该元素的未知以及字段的数据但是当我们把它理解为”不可变的列表“的时候这些信息仿佛就被忽略了。如果把元组当成一些字段的数量和位置信息的集合那么它的用处会更多。我们来看下面这个例子
# 例1 元组拆包
student_xiaoming (xiaoming,22,male,202303190701)
xiaoming_name, xiaoming_age, xiaoming_sex, xiaoming_id student_xiaoming
print(f姓名:{xiaoming_name} 年龄{xiaoming_age} 性别{xiaoming_sex} 学号:{xiaoming_id}) 姓名:xiaoming 年龄22 性别male 学号:202303190701print(- * 10)
# 例2 巧用拆包和占位符得到我们想要的数据
students_id [(小明,2023031901),(小刚,2023031902),(小红,2023031903)]
for name,_ in students_id:print(name) 小明小刚小红print(- * 10)
# 例3 利用元组拆包格式化输出
for student in students_id:print(%s:%s%student)小明:2023031901
小刚:2023031902
小红:2023031903
接下来我们就对上述元组新“姿势”逐一介绍。
元组拆包
在上述的例1中对所有变量的赋值我们仅用一行代码就解决了这就是最简单的元组拆包的应用。最简单的利用元组拆包的办法就是平行赋值也就是把元组中的所有元素一并赋值到对应的变量中如下例所示
test (苹果, apple)
chinese, english test
print(chinese, english) 苹果 apple除此之外我们还可以和*与_两个符号组合写出更简约而美的代码我们首先看下面一个例子
# 定义例子函数
def happy(rice_num, cola_num):print(f今天好开心我吃了{rice_num}碗米饭喝了{cola_num}瓶快乐水)
# 普通调用
happy(7,5) 今天好开心我吃了6碗米饭喝了5瓶快乐水# 利用*对元组进行拆包作为函数参数
test_tuple (7,5)
print(*test_tuple)
happy(*test_tuple) 7 5今天好开心我吃了7碗米饭喝了5瓶快乐水 利用_占位
在上述例子中我们使用*对元组进行了拆包然后作为函数的参数。接下来我们再来看看_和元组拆包组成的优雅用法看下面这个例子
import os
print(os.path.split(D:\\Software\\anaconda\\envs\\lp\\lib\\ntpath.py))(D:\\Software\\anaconda\\envs\\lp\\lib, ntpath.py)_, file_name os.path.split(D:\\Software\\anaconda\\envs\\lp\\lib\\ntpath.py)
print(file_name) ntpath.py在某些情况下我们在操作本地地址的时候只需要获取文件的名字而不关心其路径在上述例子中我们使用了_代替那些我们不需要的内容而使用变量file_name变量一下获取到了我们需要的文件名字。
*处理剩下的元素
还可以有很多其它的用法例如使用args作为我们不确定的参数其还能作为平行赋值中一个很重要的符号我们看下面几个例子
a, b ,*rest_num [i for i in range(10)]
print(a,b,rest_num)a, *rest_num, b [i for i in range(10)]
print(a,b,rest_num)a, *rest_num, b [i for i in range(2)]
print(a,b,rest_num)a, b, *rest_num [i for i in range(2)]
print(a,b,rest_num) 0 1 [2, 3, 4, 5, 6, 7, 8, 9]0 9 [1, 2, 3, 4, 5, 6, 7, 8]0 1 []0 1 []通过上述例子我们可以发现利用*可以在任何位置获取到我们不关心或者我们想要的取值。
嵌套元组中的拆包
元组拆包同样可以在嵌套结构中进行只要我们定义的变量是符合其结构的我们看下面这个例子:
student_information (xiaoming,202303190701,(98,77))
xiaoming_name, xiaoming_id,(xiaominmg_english, xiaoming_math) student_information
print(f姓名:{xiaoming_name} 学号:{xiaoming_id} 英语成绩:{xiaominmg_english} 数学成绩:{xiaoming_math}) 姓名:xiaoming 学号:202303190701 英语成绩:98 数学成绩:77在上述例子中我们利用与元组嵌套相同的结构获取到了我们希望的信息。
具名元组
有时候我们在编写类的时候通常不需要那么冗余的结构例如我们并不想在类中编写方法而只需要一些具有名字的属性。这时候具名元组就能满足需求我们首先来看具名元组定义的语法格式
from collections import namedtuple
类名 namedtuple(类名, 由空格隔开的或可迭代表达式组成的参数列表)具名元组的用法
我们看下面这个示例
from collections import namedtuple# 分别利用可迭代表达式与空格隔开的参数名表示属性列表
teacher namedtuple(teacher, [name,age,sex])
student namedtuple(student, name age sex)wanggang teacher(wanggang,44,male)
xiaoming student(xiaoming,18,male)print(wanggang.name)
print(xiaoming.name) wanggangxiaoming具名元组常用函数
除此之外具名元组还有几个非常常用的方法
# 查看该类的参数列表
print(teacher._fields)(name, age, sex)# 通过字典方式展示
print(xiaoming._asdict)bound method student._asdict of student(namexiaoming, age18, sexmale)# 通过元组构建具名元组
xiaohong_information (xiaohong,19,female)
xiaohong student._make(xiaohong_information)
print(xiaohong)student(namexiaohong, age19, sexfemale)总结
在本文中我们介绍了元组作为记录的功能这其中包括元组拆包具名元组等多种用法。在编程中灵活使用这些语法会使得我们的程序更易读简洁。
如果你感觉本文对你有帮助不妨给我收藏点赞如果对于本文所介绍的东西有问题可以私信我或者评论与我讨论我们下次再见。