Fluent Python 元组
数据类型 --元组tuple
元组不仅仅是不可变的列表
元组的通常是认为是不可变的数据类型,但是实际元组还可以用于没有字段名的记录
元组和记录
元组是对数据的记录:元组中的每个元素包含数据信息和位置信息
如果把元组理解为不可变的列表,元素总数和位置信息就会变得没有意义。但是如果把元组当做一些字段的集合,元素的数量和位置信息就非常重要
在任何表达失中对元组内的元素进行排序,那么,那么携带的信息就会丢失
travel_ids = [('USA','111'),('AAA','222'),('BBB','333')]
for i in sorted(travel_ids):
print("%s:%s" %i) # 在迭代的过程中,i被绑定到每一个元组上,%别匹配到对应的元组元素上
for county, _ in travel_ids:
'''
_ 在元组解包中被抛弃的变量
'''
print(county) # 想要的数据
print(_) # 测试
元组解包
元组解压、拆包,通常是平行赋值
注意的是元素的个数要一致
t = (1,2)
a,b = t
print(a)
print(b)
不使用中间变量交换两个变量的值
a= 1
b= 2
a,b= b,a
print(a)
print(b)
* 运算符把一个可迭代对象拆开作为函数的参数:
t1 = divmod(10,3)
t= (10,3)
t2 = divmod(*t) # 可以用*接收元组作为参数
print(t1)
print(t2)
解包获得文件路径中的文件名,_是一个占位符,
import os
s='/home/luciano/.ssh/idrsa.pub'
s2 = "/home/s"
_,filename =os.path.split(s)
print(_)#路径的第一部分
print(filename)#路径的最后一部分,通常用来获得路径的文件名字
用*处理剩余的数据,Python的函数中通常用*args表示获取多个,在元组的解包中同样是这样的,会省成一个列表。
更牛的是*可以在任意位置,看下面:
1 在结尾:
a,b,*c = range(5)
print(a,b,c)
#0 1 [2, 3, 4]
a,b,*c = range(2)
print(a,b,c)
# 0 1 [] 没有得话,获得是空的列表
在平行赋值中,* 前缀只能用在一个变量名前面,但是这个变量可以出现在赋值表达式的任意位置
在开头
*a, b, c, d = range(5)
print(a, b, c, d)
# [0, 1] 2 3 4 其余都会有值,剩余的给第一个
在中间
a,*b,c,d = range(5)
print(a,b,c,d)
# 0 [1, 2] 3 4 剩余的给中间
嵌套元组拆包
这是元组拆包的强大的功能

浙公网安备 33010602011771号