目录
一、Python列表推导式
1.1、使用方法
1.2、列表推导式优点
1.2.1、提升效率
1.2.2、方便转换数据
1.2.3、用于过滤数据
1.3、推广延申
1.3.1、字典推导式
1.3.2、元组推导式
1.3.3、集合推导式
二、Python三元表达式
2.1、用法
2.2、扩展用法
三、断言
四、上下文管理器(with—as)
五、异常捕获预处理
5.1、try......except语句
5.2、try......except...else语句
5.3、直接抛出异常语句
5.4、finally语句
5.5、常见异常类型
一、Python列表推导式
定义:是一种数据处理方式,在python中转化和过滤数据
格式:[表达式 for 迭代变量 in 可迭代对象【if 条件表达式】]
其中【】中的数据可以省略
1.1、使用方法
列表推导式根据for循环语句进行优化,且最终得到一个新的列表
1、优化单层For循环
For循环写法
![](https://img-blog.csdnimg.cn/9183613770a4467e9bf80a8ef0e61ac9.png)
列表推导式写法
![](https://img-blog.csdnimg.cn/cde5d6a852b147b09cd48980034f2621.png)
2、优化双层For循环
For循环写法
![](https://img-blog.csdnimg.cn/e34966a660f24651b6d0ed9f0530c0b3.png)
列表推导式写法
![](https://img-blog.csdnimg.cn/0ea008fa3be5436d8ccfd68d337bbd39.png)
3、嵌套写法
For循环写法
![](https://img-blog.csdnimg.cn/d2652ddfc74f4de0b32eb8fd1b57c4fb.png)
列表推导式写法
![](https://img-blog.csdnimg.cn/53f51087c608498eb043ffc8580aefbd.png)
1.2、列表推导式优点
1.2.1、提升效率
在 Python3 中列表推导式中引入的变量仅仅作用在局部作用域,只在局部起作用,表达式的上下文里的同名变量还可以被正常引用,局部变量并不会影响到它们。
![](https://img-blog.csdnimg.cn/010a71a1911d4f9786a3eeaccd1a9173.png)
1.2.2、方便转换数据
可以将列表中的数据批量进行转化,并将转化后的数据以新列表情况进行输出
![](https://img-blog.csdnimg.cn/861ca497c3074b9e914fd278906f76d4.png)
1.2.3、用于过滤数据
通过后面条件表达式对数据进行过滤
![](https://img-blog.csdnimg.cn/f2dbc9c6351c4c928b6a732545ba9d01.png)
1.3、推广延申
1.3.1、字典推导式
格式:{键:值 for 迭代变量 in 可迭代对象 [if 条件表达式]}
![](https://img-blog.csdnimg.cn/ede984e16ab64f0ba116f9ee36ad3cb3.png)
注意:字典中不会出现同名key,第二次出现时会更新value数值,故无论如何迭代,字典中键仍旧具备唯一性。
1.3.2、元组推导式
格式:(元素 for 迭代变量 in 可迭代对象 [if 条件表达式])
![](https://img-blog.csdnimg.cn/5a515698c4f9478291fd85308396ce96.png)
大家也应该发现了,元组推导式与列表推导式/字典推导式不同,列表推导式/字典推导式按格式书写完后输出为对应的列表和字典,而元组表达式输出的是一个生成器对象,此时如果想令该元组推导式输出一个元组的话,请用tuple(tuple1)来做映射即可
元组推导式也被称为生成器推导式
1.3.3、集合推导式
格式:{元素 for 迭代变量 in 可迭代对象 [if 条件表达式]}
![](https://img-blog.csdnimg.cn/75f1225743f6443b9f10eaa2a6de554e.png)
注意:集合是无序且不重复的,所以执行过程中会先去重,并且每次运行显示的顺序不同
二、Python三元表达式
定义:在python中,三元表达式是一种语法结构,也被称之为条件表达式。
格式:输出(True) if 判断条件 else 输出(False)
2.1、用法
1、用于if语句简化
原if语句写法
![](https://img-blog.csdnimg.cn/254f2c95deb949db891961a8bebd7da3.png)
三元表达式写法
![](https://img-blog.csdnimg.cn/7cea75def38e4b8cb8836788846511ac.png)
2、用于返回多条语句
If条件语句写法
![](https://img-blog.csdnimg.cn/b3b06a8e266442a0a61fc613bb1dfa1f.png)
三元表达式写法
![](https://img-blog.csdnimg.cn/5d28fae4e1d64bb3a80beb596dd4ce84.png)
注意:此时代码返回的数据为元组,元组之间用逗号连接
3、函数中使用三元表达式
![](https://img-blog.csdnimg.cn/b9fe3d419f544986ab47133b27aeba83.png)
4、列表推导式中使用三元表达式
![](https://img-blog.csdnimg.cn/d0e4edf8b1af4d748a9995dcfe7f488c.png)
注意:在列表推导式中使用三元表达式,需要将if条件语句提前,for循环语句推后。
5、lambda中使用三元表达式
![](https://img-blog.csdnimg.cn/fe114a3f48154893a8dcbf3daea048f0.png)
6、嵌套场景
![](https://img-blog.csdnimg.cn/742a28d01c404422adfcfddf94c2f2f7.png)
2.2、扩展用法
语法格式:(表达式为假输出X,表达式为真输出Y)[条件表达式])
{表达式为假输出X1:Y1,表达式为真输出X2:Y2}[条件表达式]
元组条件表达式:
![](https://img-blog.csdnimg.cn/9295569eb4a74c389ebc1e356bb0e193.png)
字典条件表达式:
![](https://img-blog.csdnimg.cn/5305c925ef0a48d18ebd5313ccacc7ad.png)
三、断言
定义:Python断言(python assert)可以理解成简易的if else语句,目的是判断条件表达式是否为真,为真的时候程序继续执行,否则便停止运行,抛出AssertionError。
格式:assert 表达式,[异常打印]
![](https://img-blog.csdnimg.cn/cc5475cddab041b093107cf00eab9b8d.png)
四、上下文管理器(with—as)
含义:python中针对文件和数据库操作,都需要在程序执行完毕后进行清理,python继承了一套自动操作,目的是在每次文件或数据库使用完成后,直接自动释放对应资源。可以说,with...as语句实现了自动分配并释放资源。
格式: with 表达式 [as 指定一个变量名]:
代码块
代码块
[]中可以省略,含义为将前文表达式的结果保存到一个变量中
用途:
用于对文件的操作上,如果不使用上下文管理器,操作是这样的:
![](https://img-blog.csdnimg.cn/a7d673bab53148d685140820cd3f78b8.png)
With...as使用后如图所示:(with...as语句是一种python控制流语句,也是简单异常报错语句)
![](https://img-blog.csdnimg.cn/6e245c9803504eb599b34c1bddb8798b.png)
五、异常捕获预处理
定义:程序异常或出现BUG状态时,通过异常捕获预处理来实现报错层面的控制
5.1、try......except语句
程序默认执行状态下,出现报错就会直接终止运行,我们用try...except语句实现出现问题提示报错异常,然后继续执行接下来的代码。
不做处理情况下报错中止:
![](https://img-blog.csdnimg.cn/6a8f713495bb4d8c84bc7502cfbaa421.png)
格式:
![](https://img-blog.csdnimg.cn/10e748920d3140ff82f0d741b6c74d2d.png)
用try...except格式修改后得到下图所示,此时程序不会报错,会进入异常处理,处理完后继续程序向下执行。如果try语句中没有出现错误,则except中代码不会执行。
![](https://img-blog.csdnimg.cn/36c104bcd9714a07ac27f929fdb51335.png)
注意:except后面书写的是异常报错对象,只有当try中报错现象和报错对象一致时才会进行异常处理,如果不一致,仍旧会出现错误。如下图所示:
![](https://img-blog.csdnimg.cn/37a895de6e6d4dc8b1682a7240b567c2.png)
此时若想解决该问题,则需要在except后面加上对应报错对象即可,如下图所示:
![](https://img-blog.csdnimg.cn/fccdb24489a546c6aa8ac8f421b09bc4.png)
![](https://img-blog.csdnimg.cn/da30c34142174a6a92c3a6424f10b013.png)
当然,还有种一劳永逸的方法,放我们不知道具体报错时,可以except后面什么都不写,省略异常对象,直接输出异常处理,如下图所示:
![](https://img-blog.csdnimg.cn/1bdb3104deae48d086786ae2535f81d5.png)
5.2、try......except...else语句
该语句表示按照顺序进行异常处理,当待检测代码有异常时,如果均未满足前几种异常处理条件,则直接报错结束。若代码没有问题,则执行else下面的正常操作。
格式:
![](https://img-blog.csdnimg.cn/adf1a09d76224e77857d6c8efc3ce857.png)
举个简单的例子,如下图所示:
![](https://img-blog.csdnimg.cn/5a76a5244dd94dcc8ad4a3b923ba590c.png)
5.3、直接抛出异常语句
通过except 异常类型 as e语句直接抛出异常,后面的e只是一个变量,可以起名任意名称。
![](https://img-blog.csdnimg.cn/5c0c51f70311417e83ad721d6500f632.png)
5.4、finally语句
try … except语句也可以与finally语句一同使用,表示最后无论代码是否有异常均执行的代码。共三种情况,如下图所示:
![](https://img-blog.csdnimg.cn/9039ae542ff84430af88c71ed2125ac7.png)
![](https://img-blog.csdnimg.cn/b85172e68d804add81903a3da4bcd5c2.png)
![](https://img-blog.csdnimg.cn/f8e90ba4cd784493a3846e01c2984957.png)
可看出无论能否匹配的上except和else的处理,都会执行finally后面的操作,该操作完成后才会报错退出。
5.5、常见异常类型
AttributeError 某个对象没有属性
Exception 通用型异常对象
FileNotFoundError 找不到文件
IOError 输入输出异常
IndexError 索引异常
KeyError 键异常
NameError 对象名称异常
SyntaxError 语法错误
TypeError 类型错误
ValueError 值错误