python自学第31天 python之小白太玄经 2019.12.23

5.3.元组和序列

列表和字符串有很多通用的属性,例如索引和切割操作。
它们是序列类型(参见 Sequence Types -list,tuple,range)中的两种。
因为python是一个不停进化的语言,可能会加入其它的序列类型。
这里介绍另一种标准序列类型:元组。

一个元组由数个逗号分隔的值组成,例如:
在这里插入图片描述
元组在输出时总是有括号的,以便于正确表达嵌套结构。
在输入时可以有或没有括号,不过经常括号是必须的(如果元组是一个更大的表达式的一部分)。不能给元组的一个独立元素赋值(尽管你可以通过联接和切割来模拟)。还可以创建包含可变对象的元组,例如列表。

虽然元组和列表很类似,他们经常被用来在不同的情况下和不同的用途。
元组有很多用途。
例如(x, y)坐标对,数据库中的员工记录等等。
元组就像字符串,不可变的。通常包含不同种类的元素并通过分拆(本节后面的内容)或索引访问(如果是namedtuples,甚至可以通过属性)列表是可变的,它们的元素通常是相同类型的并通过迭代访问。

一个特殊的问题是构造包含零个或一个元素的元组:为了适应这种情况,语法上有一些额外的改变。一对空的括号可以创建空元组:
要创建一个单元素组可以在值后面跟一个逗号(在括号中放入一个单值不够明确)。丑陋,但是有效。如:
在这里插入图片描述
语句中 t = 12345, 54321, ‘hello’ 是元组封装(ruple packing)的一个例子:值12345,54321和’hello!'被封装进元组。其逆操作可能是这样:

x, y, z = t
这个调用等号右边可以是任何线性序列,称之为序列拆封非常恰当。序列拆封要求左侧的变量数目与序列的元素个数相同。要注意的是可变参数(multiple assignment) 其实只是元组封装和序列拆封的一个结合。

5.4集合

python还包含了一个数据类型–set(集合)。集合是一个无序不重复的集。基本功能包括关系测试和消除重复元素。集合对象还支持union(联合),intersection(交),difference(差)和sysmmetric difference(对称差集)等数学运算。

大括号或set()函数可以用来创建集合。
注意:想要创建空集合,必须使用set()而不是{}。后者用于创建空字典,
示例:
在这里插入图片描述
类似列表推导式,这里有一种集合推导式语法:

在这里插入图片描述

5.5.字典

字典是python内建数据类型,非常有用的。(参见Mapping Types - dict).

字典在某些语言中可能称为联合内存(associative memories)或联合数组(associative arrays)/
序列是以连续的整数为索引,与此不同的是,字典以关键字为索引,关键字可以是任意不可变类型。通常是字符串或数值。如果元组中只包含字符串和数字,它可以作为关键字,如果它直接或间接的包含了可变对象,就不能当作关键字。
不能用列表做关键字,因为列表可以用索引,切割或者append()和extend()等方法改变。

理解字典的最佳方式是把它看做无序的键:值对(key:value对)集合,键必须是互不相同的(在同一个字典之内)、一对大括号创建一个空的字典:{}。初始化列表时,在大括号内放置一组逗号分隔的键:值对,这也是字典输出的方式。

字典的主要操作是依据键来存储和析取值。也可以用del来删除键:值对(key:value).如果你用一个已经存在的关键字存储值,以前为该关键字分配的值就会被遗忘。试图从一个不存的键中取值会导致错误。

对一个字典执行 list(d.keys())将返回一个字典中所有关键字组成的无序列表(如果你想要排序,只需要使用sorted(d.keys()).
使用in关键字(指python语法)可以检查字典中是否存在某个关键字(指字典)

示例:
在这里插入图片描述
dict()构造函数可以直接从key-value对中创建字典:
在这里插入图片描述
此外,字典推导式可以从任意的键值表达式中创建字典:
在这里插入图片描述
如果关键字都是简单的字符串,有时通过关键字参数指定key-value对更为方便:

在这里插入图片描述

5.6.循环技巧

在字典中循环时,关键字和对应的值可以使用items()方法同时解读出来:
在这里插入图片描述
在序列中循环时,索引位置和对应值可以使用enumerate()函数同时得到:
在这里插入图片描述
同时循环两个或更多的序列,可以使用zip()整体打包:

在这里插入图片描述

需要逆向循环序列的话,先正向定位序列,然后调用reversed()函数:
在这里插入图片描述

要按排序后的顺序循环序列的话,使用sorted()函数,它不改动原序列,而是生成一个新的已排序的序列:

在这里插入图片描述

若要在循环内部修改正在遍历的序列(例如复制某些元素),建议您首先制作副本,在序列上循环不会隐式的创建副本。切片表示法方便:

在这里插入图片描述

5.7.深入条件控制

while和if语句中使用的条件不仅可以使用比较,而且包含任意的操作。
比较操作符in和 not in 审核值是否在一个区间之内。
操作符is和is not 比较两个对象是否相同;这只和诸如列表这样的可变对象有关,所有的比较操作符具有相同的优先级,低于所有的数值操作。

比较操作可以传递。例如a < b == c 审核是否a 小于b并且等于c.

比较操作符可以通过逻辑操作符and和or组合,比较的结果可以用not来取反义。这些操作符的优先级又低于比较操作符,在它们之中,not具有最高的优先级,or优先级最低,所以 A and not B or C 等于(A and (notB)) or C 当然,括号也可以用于比较表达式。

逻辑操作符 and 和 or 也称作短路操作符: 它们的参数从左向右解析,一旦结果可以确定就停止。
例如,如果A和C为真而B为假, Aand B and C 不会解析C。作用于一个普通的非逻辑值时,短路操作符的返回值通常是最后一个变量。

可以把比较或其他逻辑表达式的返回值赋给一个变量

示例:
在这里插入图片描述
python与C不同,在表达式内部不能赋值。

5.8.比较序列和其它类型

序列对象可以与相同类型的其它对象比较。
比较操作按字典序列进行:
首先比较前两个元素,如果不同,就决定了比较结果。
如果相同,就比较后两个元素,以此类推,知道所有序列都完成比较。

如果两个元素本身就是同样类型的序列,就递归字典序比较。
如果两个序列的所有子项都相等,就认为序列相等,
如果一个序列是另一个序列的初始子序列,较短的一个序列就小于另一个。
字符串的字典序按照单字符的ASCLL顺序。
示例对同类型序列之间比较:
在这里插入图片描述
需要注意的是如果通过<或>比较的对象,只要具有合适的比较方法就是合法的
比如:混合数值类型是通过它们的数值进行比较,所有0是等于0.0.
否则解释器将会触发一个typeerror异常,而不是提供一个随意的结果。

Footnotes

别的语言可能会返回一个变化的对象,允许方法连续执行,像
在这里插入图片描述
调用d.keys()将会返回一个dictionary view对象。它支持支持成员测试以及迭代等操作。
但是它的内容不是独立的原始字典-它只是一个视图。

6.模块(第六章)

找一个文本编辑器(因为python解释器退出进入都没了),这个文本编辑器就是脚本。

模块:

python提供了一个方法可以从文件中获取定义,在脚本或者解释器的一个交互式实例中使用,称为模块。(导入到另一个模块或主模块中(在脚本执行时可以调用的变量集位于最高级,并且处于计算器模式)。

模块是包括python定义和声明的文件。文件名就是模块名加上.py后缀。
模块的模块名(作为一个字符串)可以由全局变量_name_得到。

例如可以用自己惯用的文件编辑器在当前目录下创建一个叫fibo.py的文件。录入示例:
在这里插入图片描述

用的Geany编辑器
写完之后要进入python解释器并导入这个模块
在这里插入图片描述
如果打算频繁使用一个函数,可以将它赋予一个本地变量:
在这里插入图片描述
可以导入所有除了以下划线(_)开头的命名。
需要注意的是在实践中不鼓励从一个模块或包中使用*导入所有,因为这样会让代码变得很难读,不过,在交互式绘画中这样用很方便省力。

由于性能考虑,每个模块在每个解释器会话中只导入一遍。
因此,如果你修改了你的模块,需要重启解释器
如果你就是想交互式的测试这么一个模块,可以用
imp.reload()重新加载,例如:import imp: imp。reload(modulename).
今日学习结束,目前进程49页,第六章,剩余72页,10章。

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值