Python 元组拆包和具名元组解析

前言

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

元组对于数据的记录

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

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

>>>xiaoming,xiaohua=(16,18)

>>>xiaoming

16

>>>students_info=[('xiaoming',16),('xiaohua',18),('hanmeimei',20)]

>>>forstudentinstudents_info:

print('%s is %d years old.'%student)

xiaomingis16years old.

xiaohuais18years old.

hanmeimeiis20years 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,[])

在平行赋值中,* 运算符前缀智能用在一个变量名前面, 但是这个变量可以出现在赋值表达式的任意位置:>>>a,*others,b,c=range(5)

>>>a,others,b,c

(0,[1,2],3,4)

>>>*others,a,b,c=range(5)

>>>others,a,b,c

([0,1],2,3,4)

具名元组

在 Python 中, collections.namedtuple 是一个工厂函数, 它可以用来构建一个带字段名的元组和一个有名字的类

用 namedtuple 构建的类的实例所消耗的内存跟元组是一样的, 因为字段名都被存在对应的类里面这个实例跟普通的对象实例比起来也要小一些, 因为 python 不会用 dict 来存放这些实例的属性

还是使用上面的小明和小华的例子来展示一下具名元组:>>>fromcollectionsimportnamedtuple

>>>Student=namedtuple('Student','name age gender')

>>>xiaoming=Student('xiaoming',16,'boy')

>>>xiaoming

Student(name='xiaoming',age=16,gender='boy')

>>>xiaoming.age

16

>>>xiaoming[2]

'boy'

Student = namedtuple(Student, name age gender), 创建一个具名元组, 需要两个参数, 一个是类名, 另一个是类的各个字段名后者可以是有多个字符串组成的可迭代对象, 或者是有空格分隔开的字段名组成的字符串 (比如本示例) 具名元组可以通过字段名或者位置来获取一个字段的信息

具名元组的特有属性

类属性_fields: 包含这个类所有字段名的元组>>>xiaoming._fields

('name','age','gender')

类方法_make(iterable): 接受一个可迭代对象来生产这个类的实例, 作用等价于 Student(*xiaohua_info)

>>>xiaohua_info=('xiaohua',18,'girl')

>>>xiaohua=Student._make(xiaohua_info)

>>>xiaohua

Student(name='xiaohua',age=18,gender='girl')

实例方法_asdict(): 把具名元组以 collections.OrdereDict 的形式返回, 可以利用它来把元组里的信息友好的展示出来>>>xiaohua._asdict()

OrderedDict([('name','xiaohua'),('age',18),('gender','girl')])

>>>forkey,valueinxiaohua._asdict().items():

print(key,':',value)

name:xiaohua

age:18

gender:girl

来源: http://www.jqhtml.com/10804.html

python中元组拆包_Python 元组拆包和具名元组解析相关推荐

  1. python中json模块_Python使用内置json模块解析json格式数据的方法

    本文实例讲述了Python使用内置json模块解析json格式数据的方法.分享给大家供大家参考,具体如下: Python中解析json字符串非常简单,直接用内置的json模块就可以,不需要安装额外的模 ...

  2. python输出元组中的元素_python 列表(list)元组(tuple)字典(dict)如何打印中文总结...

    python中,如果直接使用print去打印含中文元素的list.tuple.dict,并不能打印出中文字符,而是打印出unicode编码, 例如:tuple1 = ('小甲鱼', '耐克', '李宁 ...

  3. python如何生成列表和元组数据_Python数据类型(列表和元组)

    1.3 List(列表) 列表由一系列按特定顺序排列的元素组成. 在Python中,用方括号[ ]来表示列表,并用逗号来分隔其中的元素. 1.3.1 访问列表元素 在Python中,第一个列表元素的索 ...

  4. Python中list(列表)、tuple(元组)、dict(字典)的基本操作快速入门

    最近看了一下Python,觉得Python中列表.字典以及元组等比较常用,于是顺手简单的总结了一下. 1.列表是Python中比较常用的数据类型,并且列表是可以改变的,使用也非常简单,具体操作如下: ...

  5. python中定义数据结构_Python中的数据结构—简介

    python中定义数据结构 You have multiples algorithms, the steps of which require fetching the smallest value ...

  6. python中sys用法_python中os和sys模块的区别与常用方法总结

    python 的 python中os和sys模块的区别与常用方法总结 前言 本文主要介绍了关于python中os和sys模块区别与常用方法的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看 ...

  7. python中set函数_python中的set函数、列表的操作

    原博文 2019-10-31 11:12 − 一.set函数 set()函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集.差集.并集等. 例题: 1.set函数求交集(&am ...

  8. python中定义字符串_python中的字符串

    python中的字符串一旦定义,则不可以修改 python中的原始字符串 即 在字符串前面加小写字母r 比如:打印输出C:\Program Files\Microsoft Games python中的 ...

  9. for in在python中什么意思_python for in中的in

    清波 首先 in 在Python 中是操作符,具体来说是 成员操作符.就是对于序列(字符串,元组,列表)或集合(set)或映射(字典)这些数据类型 做 成员判断,自然成员判断的返回是 在其中和不在其中 ...

  10. python中datetime模块_python中的datetime模块

    datetime是python中日期和时间管理模块,包含date,time,datetime,timedelta,datetime_CAPI,sys,timezone等类 datetime模块中包含的 ...

最新文章

  1. usaco The Perfect Stall(二分匹配模板)
  2. Linux I2C工具查看配置I2C设备【转】
  3. 陶哲轩实分析定义8.5.5的一个注记
  4. arduino i2c 如何写16位寄存器_基于STM32使用I2C读取传感器数据
  5. TCP/IP卷一实验之------EIGRP
  6. windows下db2的一些使用心得(不含安装)
  7. Firefox 37原生支持HTML5视频回放功能
  8. SDN(软件定义网络)详解
  9. 防火墙转发流量的原理
  10. 滑动窗口协议如何实现流量控制
  11. eclipse-Mars2-4.5.2安装Tomcat插件
  12. 解读 Oracle 12c 自适应执行计划一例
  13. NYOJ_1248_海岛争霸【最短路】
  14. 网络工程师发展及待遇--学习
  15. 中石化卖咖啡报:产品体验报告 | 网易云音乐,体验一个“社交+音乐+直播”的动听世界
  16. Apache Echarts常用图表之柱状图
  17. EXCEL表格转化为XML格式文件
  18. 05 | 应届生身份为什么重要,只有一次
  19. 《现代控制理论》第5章
  20. AirTest keyevent事件

热门文章

  1. 基于ssm的药房药店药品管理系统
  2. 基于PostgreSQL的时区问题解决
  3. 欧姆龙服务器显示oE,在公网如何配置OE客户端
  4. 基于STM8L15x-16x-05x系列单片机的官方标准库文件创建第一个EWSTM8工程项目
  5. 入门PCB设计AD9学习笔记9-向工厂提供的光绘文件
  6. 本人亲测,可以使用,万网虚拟主机绑定多个子域名方法(转载)
  7. 服务器上面显示横杠,系统开机左上角显示一横杠一直闪没法系统
  8. 19Python爬虫--爬取新浪新闻标题并保存到数据库
  9. 公有云历史故障汇总(2017-2021 阿里云/腾讯云/AWS厂商)
  10. spark程序消费kafka数据报错:java.lang.NoSuchMethodError: net.jpountz.util.Utils.checkRange([BII)V