Python元组拆包和具名元组解析实例详解
作者:mrr 发布时间:2021-10-17 05:26:58
前言
在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元组拆包和具名元组解析实例详解网站的支持!
来源:http://www.jqhtml.com/10804.html


猜你喜欢
- 阅读上一章:Chapter 6 短语元素Chapter 7 锚点HTML中的链接,正确的说法应该称作"锚点",它不仅让我
- 学习了vue.js一段时间,拿它来做2个小组件,练习一下。我这边是用webpack进行打包,也算熟悉一下它的运用。源码放在文末的 githu
- 前言虽然Python的标准库中 urllib2 模块已经包含了平常我们使用的大多数功能,但是它的 API 使用起来让人感觉不太好,而 Req
- 分割成一个包含两个元素列表的列对于一个已知分隔符的简单分割(例如,用破折号分割或用空格分割).str.split() 方法就足够了 。 它在
- 咱们Python 集中营有一个专题就是分享一些有意思的东西,今天大概看了一下pygame的这个非标准库就想着使用它来做个小游戏-拼图。通过加
- <!--模板--> <table width="100%" borde
- 对于更完整的代码可以参考,这个是支持数据库的版本。经过测试Asp+Ajax仿google搜索提示效果 数据库版google搜索提示.rar
- 序言小学妹说要毕业了,学了一学期Python等于没学,现在要做毕设做不出来,让我帮帮她,晚上去她家吃夜宵。当时我心想,这不是分分钟的事情,还
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&
- 1. 数据集基本信息df = pd.read_csv()df.head():前五行;df.info():rangeindex:行索引;dat
- 1 深分页问题1.1 创建表CREATE TABLE `player` ( `id` bigint(20) NOT NULL A
- 本文实例讲述了Python中list以及list与array的相互转换实现方法。分享给大家供大家参考,具体如下:python中的list是一
- 占位符,顾名思义就是插在输出里站位的符号。占位符是绝大部分编程语言都存在的语法, 而且大部分都是相通的, 它是一种非常常用的字符串格式化的方
- 几个方式(本文不作介绍),要将Session保存到SQL Server中,需要有以下几个步骤:1.首先要创建用于保存Session数据的数据
- 本文实例讲述了Oracle删除死锁进程的方法。分享给大家供大家参考。具体如下:步骤1:用以下SQL查看进程列表,判断出被锁定的表SELECT
- 本文实例讲述了MySQL触发器简单用法。分享给大家供大家参考,具体如下:mysql触发器和存储过程一样,是嵌入到mysql的一段程序,触发器
- 前言ECMAScript 是 JavaScript 语言的国际标准,JavaScript 是 ECMAScript 的实现。ES6 的目标,
- 一、作用主要用于保留组件状态或避免重新渲染。二、用法<keep-alive> 包裹动态组件时,会缓存不活动的组件实例,
- 简单演示import matplotlib.pyplot as pltimport numpy as np# 从[-1,1]中等距去50个数
- 首先我们放出tf2.0关于tf.keras.layers.Conv2D()函数的官方文档,然后逐一对每个参数的含义和用法进行解释:tf.ke