首页 > 编程 > Python > 正文

Python元组拆包和具名元组解析实例详解

2020-02-22 23:33:01
字体:
来源:转载
供稿:网友

前言

在Python中元组是一个相较于其他语言比较特别的一个内置序列类型。有些python入门教程把元组成为“不可变的列表”,这种说法是不完备的,其并没有完整的概括元组的特点。除了用作不可变的列表,它还可以用于没有字段名的数据记录。下面的内容就围绕元组作为数据记录属性展开,并介绍带字段名的具名元组函数namedtuple,列表属性不再本文中叙述。

元组对于数据的记录

元组中的每个元素都存放了记录中一个字段的数据,外加这个字段的位置,正是这个位置信息给数据赋予了意义。

下面的一段代码就演示了元组被当作记录来使用。如果在任何的表达式里我们在元组内对元素排序,这些元素多携带的信息就会丢失,因为这些信息是跟它们的位置强关联的。

#把元组作记录  >>> xiaoming, xiaohua = (16, 18)  >>> xiaoming  16  >>> students_info = [('xiaoming', 16), ('xiaohua', 18), ('hanmeimei', 20)]  >>> for student in students_info:    print('%s is %d years old.'%student)  xiaoming is 16 years old.  xiaohua is 18 years old.  hanmeimei is 20 years old.  >>>

在这个示例中,我们把元组(16,18)里的元素分别赋值给变量xiaoming,xiaohua。同样在for循环中,一个%运算符就把student元组里的元素对应到了Print函数的格式字符串空档中。这两个都是元组拆包的应用。
元组拆包可以应用到任何可迭代对象上,唯一的硬性要求是,被可迭代对象中的元素数量必须要跟接受这些元素的元组的空档数一致。除非用*来表示忽略多余的元素。

元组拆包

最好辨认的元组拆包形式就是平行赋值 ,也就是把一个可迭代对象里的元素,一并赋值到由对应的变量组成的元组中。例如:

>>> age_list = (16,18)  >>> xiaoming, xiaohua = age_list #这里就是元组拆包

另一个我们熟悉的平行赋值的例子就是交换两个变量的值:

>>> a, b = b, a #Python就是如此的优雅

还可以用*运算符把一个可迭代对象拆开作为函数的参数:

>>> divmod(20,8)  (2, 4)  >>> t = (20, 8)  >>> divmod(*t)  (2, 4)  >>> quotient, remainder = divmod(*t)  >>> quotient, remainder  (2, 4)

用*来处理剩下的元素

在Python中,函数用*args来获取不确定数量的参数算是一种经典写法了。在Python3中,这个概念被扩展到了平行赋值中:

>>> 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, [])            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表