记录数据
通常理解元组为: 元素不可改变的列表, 但是元组还有优良的记录数据的功能
如下记录班级信息
location_1 = (4,3, 2) # 教室位置:4号教学楼第3层第2个教室
class_name, boys, girls, tearchers, location = ('class_1', 31, 30, 10, location_1) # 1班,男生31人,女生30人,老师10人
各种记录用法收录
元组和%
# 元组使用%
class_1 = ('class_1', 31, 30, 10, (4, 3, 2))
print('班级:%s/男生:%d/女生:%d/老师:%d/教室位置:%s' % class_1)
元组和 _
# 元组使用 占位符 _
_, boys, _, _, _ = ('class_1', 31, 30, 10, (4, 3, 2))
print(boys)
# 输出
31
元组拆包
class_name, boys, girls, teachers, location = ('class_1', 31, 30, 10, (4, 3, 2))
元组还可以嵌套拆包
class_1 = ('class_1', 31, 30, 10, (4, 3, 2))
_, boys, _, _, (unit, floor, room) = class_1
print(room)
两个变量交换值
a, b = b, a
元组和 *
我们之后函数可以返回多个参数,传到函数外部是元组的形式调用,如下a的type是元组,a[0] = class_name
def test():
pass
return class_name, boys
a = test()
同理,入参也可以用元组的形式传参
def test(class_name, boys):
pass
return -1
a = ('class_1', 32)
test(*a)
元组中还可以使用 * 来模糊处理元素
a, b, *rest = range(5)
a, b, rest (0, 1, [2, 3, 4])
a, b, *rest = range(3)
a, b, rest (0, 1, [2])
a, b, *rest = range(2)
a, b, rest (0, 1, [])
a, *body, c, d = range(5)
a, body, c, d (0, [1, 2], 3, 4)
*head, b, c, d = range(5)
head, b, c, d ([0, 1], 2, 3, 4)
具名元组
用到collections.nametuple, 用来构建一个带字段名的元组和一个有名字的类
from collections import namedtuple
ClassName = namedtuple('ClassName', 'class_num boys girls teachers location')
class_1 = ClassName('class_1', 31, 32, 10, (4, 2, 2))
print(class_1.location)
print(class_1[1])
# 输出
(4, 2, 2)
31
具名元组的专有属性
# ._fields
print(class_1._fields)
('class_num', 'boys', 'girls', 'teachers', 'location')
# ._make(iterable) 创建一个类
class_2_data = ('class_2', 31, 30, 10, (4, 3, 1))
class_2 = ClassName._make(class_2_data)
# _asdict() 返回一个详细信息字典
print(class_1._asdict())
{'class_num': 'class_1', 'boys': 31, 'girls': 32, 'teachers': 10, 'location': (4, 2, 2)}
“不可以变列表”
参考文献
《流畅的Python》 © 2015 by Luciano Gama de Sousa Ramalho.