Python 学习 2:元组的“另类”用法

本文介绍了Python元组的不同用法,如作为记录数据结构、使用百分号(%)和下划线(_)进行格式化输出、拆包、交换变量值,以及具名元组和collections.nametuple的使用。特别强调了元组的“不可变”特性,以及其在函数参数传递中的应用。
摘要由CSDN通过智能技术生成

记录数据

通常理解元组为: 元素不可改变的列表, 但是元组还有优良的记录数据的功能
如下记录班级信息

location_1 = (43, 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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值