前言
在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, [])
在平行赋值中,*运算符前缀智能用在一个变量名前面,但是这个变量可以出现在赋值表达式的任意位置:
> 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 来存放这些实例的属性。
还是使用上面的小明和小华的例子来展示一下具名元组:
> from collections import namedtuple > 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')]) > for key, value in xiaohua._asdict().items(): print(key,':',value) name : xiaohua age : 18 gender : girl
总结
以上所述是小编给大家介绍的Python元组拆包和具名元组解析实例详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]