元组的记录和拆包

元组和记录

若不把元组当成不可变的列表来用的话,其记录功能不怎么重要,但是如果吧元组当成一些字段的集合,位置信息就很重要了

>>> 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形式返回,可以利用其返回元组的信息

猜你喜欢

转载自www.cnblogs.com/marcusday/p/10454103.html