元组和记录
若不把元组当成不可变的列表来用的话,其记录功能不怎么重要,但是如果吧元组当成一些字段的集合,位置信息就很重要了
>>> lax_coordinates = (..., ...)
>>> city, year, pop, chg, area = ('Tokoy', 2003, 32450, 0.66, 8014) # 1
>>> traveler_ids = [('USA','31195855'),('BRA','CE342567')]
>>> for passport in sorted(traveler_ids) : # sorted()方法单独在循环中使用的时候并不储存
>>> print('%s /%s' % passport) # 用占位符及%来完成格式化输出,输出特定格式
>>> for country,_ in traveler_ids :
>>> print county # 这里用_来对不需要的元组进行操作
- 在迭代的过程中passport变量被绑定到每个元组上
- % 格式运算符能被匹配到对应的元组元素上,在匹配的时候需要元素用%表示,不需要元组用 _ 来表示
- 用一个for循环能够分别提取元组里的元素,也叫元组拆包,对不需要元素用 _ 表示
元组拆包
1处中将元组中的元素赋给相应的变量,用%运算符或_运算符来进行元素赋值,拆分
除此之外,在元组拆包中可以表示元组中的其他的元素,用来处理剩下的元素,用Python中,用函数 *args 来获取不确定数量的参数是一种经典的写法
a,b,*rest = range(5)
a,b,rest
(0,1,[2,3,4])
*前缀在一个赋值表达式中只能在一个变量名前面,但是这个变量可以出现在赋值表达式的任意位置:
>>> a,*body,c,d =range(5)
>>> a,body,c,d
(0,[1,2],3,4)
>>> *head,b,c,d = range(5)
([0,1],2,3,4)
嵌套元组拆包
tokyo = ('Tokyo','JP',36.933,(35.689722,139.691667))
for name,cc,pop,(latitude,longitude) in tokyo
if longitude <=0 :
print(...)
具名元组
用namedtuple来创建元组,一个是类名,另一个是类的各个字段的名字。后者可以是由数个字符串组成的可迭代对象,或者是由空格分隔开的字段名的字符串
namedtuple除了继承了元组的属性外还有一些特殊属性
- _fields类属性包含这个类所有字段名称的元组
- 用_make通过接受这样一个可迭代对象来生成这个类的一个实例
- _asdict()方法可以把namedtuple以collection.OrderedDict形式返回,可以利用其返回元组的信息