- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Python元组拆包和具名元组解析实例详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
前言 。
在Python中元组是一个相较于其他语言比较特别的一个内置序列类型。有些python入门教程把元组成为“不可变的列表”,这种说法是不完备的,其并没有完整的概括元组的特点。除了用作不可变的列表,它还可以用于没有字段名的数据记录。下面的内容就围绕元组作为数据记录属性展开,并介绍带字段名的具名元组函数namedtuple,列表属性不再本文中叙述.
元组对于数据的记录 。
元组中的每个元素都存放了记录中一个字段的数据,外加这个字段的位置,正是这个位置信息给数据赋予了意义.
下面的一段代码就演示了元组被当作记录来使用。如果在任何的表达式里我们在元组内对元素排序,这些元素多携带的信息就会丢失,因为这些信息是跟它们的位置强关联的.
1
2
3
4
5
6
7
8
9
10
11
|
#把元组作记录
>>> 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函数的格式字符串空档中。这两个都是元组拆包的应用。 元组拆包可以应用到任何可迭代对象上,唯一的硬性要求是,被可迭代对象中的元素数量必须要跟接受这些元素的元组的空档数一致。除非用*来表示忽略多余的元素.
元组拆包 。
最好辨认的元组拆包形式就是平行赋值 ,也就是把一个可迭代对象里的元素,一并赋值到由对应的变量组成的元组中。例如:
1
2
|
>>> age_list
=
(
16
,
18
)
>>> xiaoming, xiaohua
=
age_list
#这里就是元组拆包
|
另一个我们熟悉的平行赋值的例子就是交换两个变量的值:
1
|
>>> a, b
=
b, a
#Python就是如此的优雅
|
还可以用*运算符把一个可迭代对象拆开作为函数的参数:
1
2
3
4
5
6
7
8
|
>>>
divmod
(
20
,
8
)
(
2
,
4
)
>>> t
=
(
20
,
8
)
>>>
divmod
(
*
t)
(
2
,
4
)
>>> quotient, remainder
=
divmod
(
*
t)
>>> quotient, remainder
(
2
,
4
)
|
用*来处理剩下的元素 。
在Python中,函数用*args来获取不确定数量的参数算是一种经典写法了。在Python3中,这个概念被扩展到了平行赋值中:
1
2
3
4
5
6
7
8
9
|
>>> 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
, [])
|
在平行赋值中,*运算符前缀智能用在一个变量名前面,但是这个变量可以出现在赋值表达式的任意位置:
1
2
3
4
5
6
|
>>> 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 来存放这些实例的属性.
还是使用上面的小明和小华的例子来展示一下具名元组:
1
2
3
4
5
6
7
8
9
|
>>>
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:包含这个类所有字段名的元组 。
1
2
|
>>> xiaoming._fields
(
'name'
,
'age'
,
'gender'
)
|
类方法_make(iterable):接受一个可迭代对象来生产这个类的实例,作用等价于Student 。
1
2
3
4
5
|
(
*
xiaohua_info)
>>> xiaohua_info
=
(
'xiaohua'
,
18
,
'girl'
)
>>> xiaohua
=
Student._make(xiaohua_info)
>>> xiaohua
Student(name
=
'xiaohua'
, age
=
18
, gender
=
'girl'
)
|
实例方法_asdict():把具名元组以collections.OrdereDict的形式返回,可以利用它来把元组里的信息友好的展示出来 。
1
2
3
4
5
6
7
|
>>> 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 。
最后此篇关于Python元组拆包和具名元组解析实例详解的文章就讲到这里了,如果你想了解更多关于Python元组拆包和具名元组解析实例详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
是否有可能进行标准的 war 部署,它可以部署在 tomcat 上,也可以构建为 OSGi 包并与 OSGi 容器 tomcat 中的其他包一起部署(我认为是处女座)? 最佳答案 是的,WAR 和 W
我在尝试将包从根目录移动到用户帐户时弄乱了我的 R 安装。我尝试通过 apt-get install 卸载(使用 --purge)并重新安装 R(r-base r-base-dev)。但我得到了错误
请原谅模糊的标题。 我正在尝试构建一个包来帮助我使用第三方云存储 API(例如 Firebase 存储),添加 Combine 支持等。这个包对 CloudKit 做同样的事情。一切都编译得很好,但是
我想将所有 Excel 工作表读入 R 列表 df。我使用的代码是: file <- file.choose() name <- basename(file) require(XLConnect) w
我正在尝试使用 R 包 RecordLinkage,并且正在使用 two articles包作者作为使用指南,除了包 documentation . 我正在使用 2 个大型数据集(超过 100k 行)
基本上我想从 applescript 包中启动一个 Python 脚本 所以我已经将文件 (Controller.py) 捆绑在包中 我需要运行的脚本是 执行 shell 脚本 "PYTHONPATH
我有脚本: $Test = (dotnet list C:\Tasks.Api.csproj package) 它提供了一些包(最后有 2 个空格!): Project 'Tasks.Api' has
我正在使用这个 mopabootstrap bundle ,按照所有说明进行操作。我收到以下错误: An exception has been thrown during the compilatio
我们的存储库中有 3 个包(A、B、C)。每个包都有 dist/some-data。 (而且,这些包裹数量可能会增加) 使用 3 个不同的 dist 路径对 PublishBuildArtifacts
我想结合OSGI构建一个Web应用程序以使其模块化。但我有点困惑。我使用简单的 Hello Word Servlet 构建了一个 OSGI Web 包。有用。但现在,我怎样才能创建一个“完整的”Web
我要求对包目录中的包和子目录进行明确的说明。 一个场景 - 假设我有一个目录 food,其中包含一个子目录 Fruit,我将其用作包名称。 我有一个名为 apple.java 的 java 文件,其中
我怎么说 MXML 组件在某个包中?好吧,它在不同的文件夹中......我知道怎么做 ActionScript......但是当我在 MXML 中这样做时,我没有明确声明包,因为我不知道如何以及何时将
我在 Google App Engine 上进行开发,这意味着我有一个部署命令 (appcfg.py update),它只需将整个目录的副本上传到 App Engine 并在那里运行。 我看到很多在线
我在计算包和 channel 之间的多对多关系时遇到了问题。每个 channel 都属于一个包,但一次有多个包。 IE: Channel 1 属于 Package 1,2,3,4,5 Channel
在我的数据库接口(interface)库中 jOOQ ,我想添加对 Oracle(或 DB2 等)包的支持。我已经实现了存储过程/函数支持,其中每个存储对象都被建模为生成的 Java 类。比如这个存储
我对 gradDescent package 有理解上的问题在 R 中。假设我有一个包含一个自变量的数据集,我想对该数据运行简单的线性回归,并使用批量梯度下降 (GD) 算法估计模型及其参数。 例如,
我使用带有 CommonJS 模块输出的 TypeScript 和 webpack 创建一个浏览器包,使用 libraryTarget: 'var'在 webpack 中,这样我的库将作为全局变量“F
我是 django 的新手,我一直在浏览 djangopackages 站点。我想知道那些“django”包和不是 django 包的 python 库之间有什么区别。 例如,sendgrid 有一个
我已经在 Py2.7 中创建了一个包,我正在尝试使其与 Py3 兼容。问题是如果我在 __init__.py 导入构建返回这个错误 error in daysgrounded setup comman
有人能解释一下 egg-info 目录是如何与它们各自的模块相关联的吗?例如,我有以下内容: /usr/local/lib/python2.5/site-packages/quodlibet/ /us
我是一名优秀的程序员,十分优秀!