python函数式变成的简单介绍( 三 )


tuple支持list当中绝大部分操作:
我们可以用多个变量来解压一个tuple:
解释一下这行代码:
我们在b的前面加上了星号,表示这是一个list。所以Python会在将其他变量对应上值的情况下 , 将剩下的元素都赋值给b 。
补充一点,tuple本身虽然是不可变的,但是 tuple当中的可变元素是可以改变的。比如我们有这样一个tuple:
我们虽然不能往a当中添加或者删除元素,但是a当中含有一个list,我们可以改变这个list类型的元素,这并不会触发tuple的异常:
dict也是Python当中经常使用的容器,它等价于C++当中的map , 即 存储key和value的键值对。我们用{}表示一个dict,用:分隔key和value 。
对。我们用{}表示一个dict,用:分隔key和value 。
dict的key必须为不可变对象,所以 list、set和dict不可以作为另一个dict的key ,否则会抛出异常:
我们同样用[]查找dict当中的元素,我们传入key,获得value,等价于get方法 。
我们可以call dict当中的keys和values方法,获取dict当中的所有key和value的集合,会得到一个list 。在Python3.7以下版本当中,返回的结果的顺序可能和插入顺序不同,在Python3.7及以上版本中,Python会保证返回的顺序和插入顺序一致:
我们也可以用in判断一个key是否在dict当中,注意只能判断key 。
如果使用[]查找不存在的key,会引发KeyError的异常 。如果使用 get方法则不会引起异常,只会得到一个None :
setdefault方法可以 为不存在的key 插入一个value , 如果key已经存在,则不会覆盖它:
我们可以使用update方法用另外一个dict来更新当前dict,比如a.update(b) 。对于a和b交集的key会被b覆盖,a当中不存在的key会被插入进来:
我们一样可以使用del删除dict当中的元素,同样只能传入key 。
Python3.5以上的版本支持使用**来解压一个dict:
set是用来存储 不重复元素 的容器,当中的元素都是不同的,相同的元素会被删除 。我们可以通过set() , 或者通过{}来进行初始化 。注意当我们使用{}的时候,必须要传入数据 , 否则Python会将它和dict弄混 。
set当中的元素也必须是不可变对象,因此list不能传入set 。
可以调用add方法为set插入元素:
set还可以被认为是集合,所以它还支持一些集合交叉并补的操作 。
set还支持 超集和子集的判断 ,我们可以用大于等于和小于等于号判断一个set是不是另一个的超集或子集:
和dict一样,我们可以使用in判断元素在不在set当中 。用copy可以拷贝一个set 。
Python当中的判断语句非常简单,并且Python不支持switch,所以即使是多个条件,我们也只能 罗列if-else。
我们可以用in来循环迭代一个list当中的内容,这也是Python当中基本的循环方式 。
如果我们要循环一个范围,可以使用range 。range加上一个参数表示从0开始的序列,比如range(10),表示[0, 10)区间内的所有整数:
如果我们传入两个参数 , 则 代表迭代区间的首尾。
如果我们传入第三个元素,表示每次 循环变量自增的步长。
如果使用enumerate函数,可以 同时迭代一个list的下标和元素 :
while循环和C++类似,当条件为True时执行,为false时退出 。并且判断条件不需要加上括号:
Python当中使用 try和except捕获异常 ,我们可以在except后面限制异常的类型 。如果有多个类型可以写多个except,还可以使用else语句表示其他所有的类型 。finally语句内的语法 无论是否会触发异常都必定执行 :
在Python当中我们经常会使用资源,最常见的就是open打开一个文件 。我们 打开了文件句柄就一定要关闭,但是如果我们手动来编码 , 经常会忘记执行close操作 。并且如果文件异常 , 还会触发异常 。这个时候我们可以使用with语句来代替这部分处理,使用with会 自动在with块执行结束或者是触发异常时关闭打开的资源。

推荐阅读