容器:
列表:列表是有序、可变的数据类型;列表中可以包含不同类型的对象;列表可以由[ ]创建;支持下标和切片操作
![](https://img-blog.csdnimg.cn/direct/c4045a794e334f3a95ec1d56e4491212.png)
![](https://img-blog.csdnimg.cn/direct/665602c074d64f2faf07c830f5bad62c.png)
列表的其他操作
![](https://img-blog.csdnimg.cn/direct/c32d15f8585f4493a4fe18819b43328b.png)
![](https://img-blog.csdnimg.cn/direct/f4fc1a28a6514de6a02552a21c59a66c.png)
练习:alist = ['lisi','tom','jerry','xixi','xiaomei']
计算列表的长度并打印,通过切片获取索引为偶数的所有值并打印出获取后的列表,列表中追加元素mike并打印添加后的列表,在列表索引为1的位置插入元素Tony并打印添加后的列表,修改列表索引为2的位置的元素为Kelly并打印修改后的列表,请将列表2=[1,"a",3,4,"heart"]的每一个元素追加到列表li中并打印添加后的列表,请删除列表中的元素"xixi”并打印删除后的列表,请删除列表中索引为2的元素并打印删除元素后的列表。
![](https://img-blog.csdnimg.cn/direct/0f2e6f4a1d6b4fbb879e09030b3f2efa.png)
![](https://img-blog.csdnimg.cn/direct/29fba029fdc143f48184236168611f11.png)
元组(tuple):元组是有序的(索引、切片)、不可变类型,通过()创建元组,与列表类似作用于列表操作,绝大数也可以作用与元组,一般用于存储一些在程序中不应该被修改的一系列值。
当元组存放的是单个元素需要再后面加上逗号,否则创建元组失败
![](https://img-blog.csdnimg.cn/direct/9601b58f57464793939f411cf440d3ea.png)
![](https://img-blog.csdnimg.cn/direct/7ffa5f05fd0e4a8bbfcf71296b9736ea.png)
字典(dictionary):是除列表以外Python之中最灵活的数据类型。字典同样可以用来存储多个数据,通常用于存储描述一个物体的相关信息。和列表的区别在于列表是有序的对象集合,字典是无序的对象集合。字典用{ }定义。字典使用键值对存储数据,键值对之间使用“ ,”分隔,键key是索引,值value是数据,键和值之间使用‘:’分隔,键必须是唯一的,值可以取任何数据类型,但键只能使用字符串、数字或元组。
查询字典:
![](https://img-blog.csdnimg.cn/direct/476e13dad30e40699c3855aa56581b18.png)
![](https://img-blog.csdnimg.cn/direct/e03f857f3a7d4570b6dd3ba08e0fc4cd.png)
修改与删除字典:
![](https://img-blog.csdnimg.cn/direct/4650e6d9c70346bba21389edca7e7e67.png)
![](https://img-blog.csdnimg.cn/direct/1e92b8edb6ab41f58a049a81b2e1d212.png)
练习:模拟用户登录信息系统
支持新用户注册(添加),新用户名和密码注册到字典中。支持老用户登录(查询),用户名和密码正确提示登录成功。
![](https://img-blog.csdnimg.cn/direct/58c742c13641494282f421affa32e8fb.png)
![](https://img-blog.csdnimg.cn/direct/0c13bbfbcd314b0dbda7478a0b733989.png)
集合set:集合与元组和列表相似用于做容器,在内部可以放一些子元素。集合有三特殊点:子元素不重复、子元素必须可哈希(不可变)、无序。
![](https://img-blog.csdnimg.cn/direct/20dcf498aa9d4f11a2c08ef12a457021.png)
![](https://img-blog.csdnimg.cn/direct/4e1bb1a65402429caacda53d2d38ca95.png)
交集、并集、差集
![](https://img-blog.csdnimg.cn/direct/5fca24f0844f462da16f47a059acef43.png)
![](https://img-blog.csdnimg.cn/direct/dd12b47c44ea46a6bfa819fe66e1c4db.png)
练习:查找文件的不同内容
![](https://img-blog.csdnimg.cn/direct/a7f93a01d2854e2f8c2083f549d23cc7.png)
![](https://img-blog.csdnimg.cn/direct/58866cd4f04a4909b62cf9e794f7b57a.png)
![](https://img-blog.csdnimg.cn/direct/8602df298b934fb0ae6e99965e599f8c.png)
系统管理模块:
shutil模块:可以简单的理解为sh(shell)+util(工具)=shell工具。对os模块的补充,主要针对文件的拷贝、删除、移动、压缩和解压操作。
拷贝移动
![](https://img-blog.csdnimg.cn/direct/0e24d18f3ce246aeb9d34ffa2cd963bf.png)
![](https://img-blog.csdnimg.cn/direct/7f12bec071fc48ac846e1603b28ec519.png)
权限
![](https://img-blog.csdnimg.cn/direct/dfdd7db9bd4a4f0da9780ae4b1606d22.png)
os模块:对文件系统的访问大多通过Python的os模块实现,该模块是Python访问操作系统功能的主要接口。
![](https://img-blog.csdnimg.cn/direct/781fdfde5b284e118b45677f2d931831.png)
目录的创建和删除
![](https://img-blog.csdnimg.cn/direct/6a9a81cb7305498386ab8013cdbd917e.png)
软连接的创建和删除
![](https://img-blog.csdnimg.cn/direct/3d71e090141e452e96a8a0ed8e730d31.png)
删除文件
![](https://img-blog.csdnimg.cn/direct/aa47db475ff444edb914464f8ceae81e.png)
获取文件名和路径,以文件路径最右边的‘/’符分隔
![](https://img-blog.csdnimg.cn/direct/a6d7cd4b2bbe4e5785b20d10fbc7f621.png)
![](https://img-blog.csdnimg.cn/direct/914050626e604f2782ba869b945103e3.png)
join拼接生成指定的路径根据操作系统的环境而改变,(Windows、Linux)
exits判断当前路径在系统中存在还是不存在
![](https://img-blog.csdnimg.cn/direct/211e22d5c0504099af506a5fea6506ec.png)
subprocess模块:os和shutil具有夸平台性,而subprocess只能在Linux中使用。subprocess主要用于执行系统命令,允许产生新的进程并获得返回状态。可以在Python中执行操作系统级别的命令如ifconfig、du -sh 等
![](https://img-blog.csdnimg.cn/direct/e5068c87e41145b9b339fe5b9dd56f86.png)
![](https://img-blog.csdnimg.cn/direct/1eea92f1274e400cb9b01bafb9a21b96.png)
run的返回值,args:执行的命令。returncode:执行命令成功返回0,不成功返回非0,相当于shell的$?.
![](https://img-blog.csdnimg.cn/direct/85211780fd96498697e1be0d93c462ec.png)
![](https://img-blog.csdnimg.cn/direct/72659568e3424b2c82b76195436c0d5b.png)
练习:调用ping命令
编写函数,用于测试远程主机的连通性
![](https://img-blog.csdnimg.cn/direct/31fcc2c65d4c4cccb2d6978701e93a01.png)
![](https://img-blog.csdnimg.cn/direct/2a97a9c05db54195b2a86f89234c7788.png)
异常:当Python检测到一个错误时,解释器就会指出当前流已经无法继续执行下去,这时候就出现了异常。异常是因为程序出现了错误而在正常控制流以外采取的行为。这个行为又分为两个阶段:首先是引起异常发生的错误;然后是检测(和采取可能的措施)阶段。
输入非数字是报错ValueError
![](https://img-blog.csdnimg.cn/direct/9e4434781423461487f17d8029f1d5f2.png)
![](https://img-blog.csdnimg.cn/direct/b3a739231bc64b4d9fc67d5495b1033c.png)
try:抛出异常,此时当输入的不是数字时,不影响下面的代码,也能打印出hello。
![](https://img-blog.csdnimg.cn/direct/44c008c46525454eb1eff02f4de594a4.png)
![](https://img-blog.csdnimg.cn/direct/0ea88cc0da084a2e957bef14bbc0193c.png)
当除数为0时的报错类型为ZeroDivisionError
![](https://img-blog.csdnimg.cn/direct/a0f48a88d59744aaa98089bbb117e62f.png)
抛出该异常
![](https://img-blog.csdnimg.cn/direct/3477644cf37c404bbcd16103e27fa2d0.png)
![](https://img-blog.csdnimg.cn/direct/cfbb2f0a5b5d4659ada56b1a0d0ed548.png)
拿到系统报错信息
![](https://img-blog.csdnimg.cn/direct/697a54dc0bcd402fa3fced138d639b58.png)
![](https://img-blog.csdnimg.cn/direct/c5592458f144462f85a2ad09d67f1685.png)
当执行程序,按ctrl+c退出程序时就会报错
![](https://img-blog.csdnimg.cn/direct/03326121f90a4bb5b98f797344778489.png)
抛出该报错
![](https://img-blog.csdnimg.cn/direct/eb762a9b5aa14ea88538235bd5383f8f.png)
![](https://img-blog.csdnimg.cn/direct/b12f75afc5684543967298d93127bd15.png)
当执行程序,按ctrl+d退出程序时也会报错
![](https://img-blog.csdnimg.cn/direct/63ff64a785c94d6f84006993c2d34f6a.png)
![](https://img-blog.csdnimg.cn/direct/601b9b1a2af64c329f31cb6fce5bfe23.png)
![](https://img-blog.csdnimg.cn/direct/f15f552a226d493d9e7bcfa932b3f450.png)
当按Ctrl+c和Ctrl+d的执行结果一样,需要将它们放到元组中
![](https://img-blog.csdnimg.cn/direct/85c9d464e2d24b0db0c53498a6a2d989.png)
![](https://img-blog.csdnimg.cn/direct/943ca35250eb4935800fa9d19797504f.png)
当不清楚具体的异常,使用Exception兜底
![](https://img-blog.csdnimg.cn/direct/fcf24f2beb9147cc929ac15e3988326f.png)
else子句:当try中的代码没有出现异常,则执行else中的代码
![](https://img-blog.csdnimg.cn/direct/6c5583ef912743e59d4e3cd2c6d0f7d2.png)
![](https://img-blog.csdnimg.cn/direct/67c296e161864252934d65158e2315e9.png)
当异常时就不会执行else中的代码
![](https://img-blog.csdnimg.cn/direct/990be112b8a04c69a85eea2e64fcc593.png)
打印结果跟出现异常的代码没有关系,所以可以把打印结果放到else子句中
![](https://img-blog.csdnimg.cn/direct/9c18dc28e1be4adeb2922d526ad7a014.png)
finally子句:无论try中的代码是否发生异常,都会执行finally子句中的代码
![](https://img-blog.csdnimg.cn/direct/0d814879451049fda0e10bdb2571c0f0.png)
![](https://img-blog.csdnimg.cn/direct/44b7f2b68f7b40cba007d5faffc4fc23.png)
finally应用在:打开文件,当发生了异常后导致文件没有关闭,可能会发生数据损坏,使用finally可以保证文件总是能正常的关闭。
![](https://img-blog.csdnimg.cn/direct/329fc6ba92324e3b827edb0bb52a475d.png)
自定义异常(触发异常)raise:要想自己引发异常,最简单的形式就是输入关键字raise后面跟要引发的异常的名称,根据应用程序特有的业务需求主动抛出异常。
列如:提示输入密码,如果长度少于8抛出异常。
![](https://img-blog.csdnimg.cn/direct/3a556bbefb224c798f742217b4667138.png)
![](https://img-blog.csdnimg.cn/direct/666fc9a554fa48acbe19c4cf7c00afdc.png)
或者使用和报错相关的准确异常
![](https://img-blog.csdnimg.cn/direct/b3d24e1a32c546a2af62e5bcc9da56ad.png)
![](https://img-blog.csdnimg.cn/direct/07079819736c4311b9333e905958fb98.png)
关键字参数:关键字参数的概念仅仅针对函数的调用,让调用者通过函数调用中的参数名字来区分参数
![](https://img-blog.csdnimg.cn/direct/564f890e16cf40b2bfc625367a474f77.png)
![](https://img-blog.csdnimg.cn/direct/668ce7d3cda74411910b16341d48cb0b.png)
位置传参应该放在关键字参数的前面。
![](https://img-blog.csdnimg.cn/direct/3f6e593899034e818e3c5403e76129ba.png)
练习:简单的加减法数学游戏
随机生成两个100以内的数字,随机选择加法或减法,总是使用大的数字减去小的数字。
利用列表推导式,将三行代码浓缩为一行。
![](https://img-blog.csdnimg.cn/direct/e688dfd5abf044a3b309b2d6e693ae67.png)
![](https://img-blog.csdnimg.cn/direct/4224fe62cd47421fabe86423862ff117.png)
匿名函数:Python允许用lambda关键字创造匿名函数,匿名是因为不需要以标准的def方式来声明,一个完整的lambda语句代表了一个表达式,这个表达式定义体必须和声明放在同一行。
![](https://img-blog.csdnimg.cn/direct/bdbbf4fbe5c04f1ab409a8105c294c4c.png)
![](https://img-blog.csdnimg.cn/direct/a7051cf34f1546369bfa25ddc5abb63b.png)
函数式编程:让一个函数作为另一个函数的参数
filter函数:调用一个布尔函数func来迭代遍历每个序列中的元素;返回一个使func返回值为true的元素的序列。如果布尔函数比较简单,直接使用lambda匿名函数就显得非常方便了filter(布尔函数,列表)
![](https://img-blog.csdnimg.cn/direct/bd2bdbf3d25f4f8599c3001661cecab7.png)
![](https://img-blog.csdnimg.cn/direct/3aea5091edd2406caf0b9ffbce471c73.png)
以匿名函数使用
![](https://img-blog.csdnimg.cn/direct/c235a0fd152f4101a0ee3b7b76109485.png)
![](https://img-blog.csdnimg.cn/direct/6223550edfa24dcca3f25b1c535c8f7c.png)
map函数:调用一个函数func来迭代遍历每个序列中的元素;返回一个经过func处理过的元素序列
如果函数比较简单,直接使用lambda匿名函数就显得非常方便了。map(加工函数,列表)
如果函数比较简单,直接使用lambda匿名函数就显得非常方便了。map(加工函数,列表)
![](https://img-blog.csdnimg.cn/direct/56adb80a2c65472ab244f0fa2c4cc4d3.png)
![](https://img-blog.csdnimg.cn/direct/8ebd1f65348d453f97f2c2680ea82ad3.png)
map使用布尔函数不会和filter函数一样过滤
![](https://img-blog.csdnimg.cn/direct/c4f3d9e3c73d4b11b3481184af7cf45a.png)
![](https://img-blog.csdnimg.cn/direct/e2e93744d4634a3a82132c1be56391ec.png)
全局变量:在函数外部定义的变量。在一个模块中最高级别的变量有全局作用域。全局变量的一个特征是除非被删除掉,否则它们的存活到脚本运行结束,且对于所有的函数,他们的值都是可以被访问的
局部变量:在函数内部定义的变量。局部变量只时暂时地存在,仅仅只依赖于定义它们的函数现阶段是否处于活动。当一个函数调用出现时,其局部变量就进入声明它们的作用域。在那一刻,一个新的局部变量名为那个对象创建了一旦函数完成,框架被释放,变量将会离开作用域
![](https://img-blog.csdnimg.cn/direct/cd4d6c391ee54b98b42e9c072ca6cd9d.png)
![](https://img-blog.csdnimg.cn/direct/89369465b301492eac25e10dcb39f02a.png)
使用global语句在函数内部做声明使用全局变量
![](https://img-blog.csdnimg.cn/direct/54bcb621fef64ac09ce770f75be7ec07.png)
![](https://img-blog.csdnimg.cn/direct/1c6f3d0ad9a8458eb69731d12fe17b2f.png)
生成器:Python使用生成器对延迟操作提供了支持,所谓延迟操作,是指在需要的时候才产生结果,而不是立即产生结果。一个函数或者子程序只返回一次,但一个生成器能暂停执行并返回一个中间的结果。
生成器表达式:使用列表推导式将数据一次性放到内存中,当数据太大时内存就放不下了。使用生成器能想要数据的时候读取,不会给内存造成太多的压力。
![](https://img-blog.csdnimg.cn/direct/ecb0996fa8184a6daf90578f5bf60c70.png)
![](https://img-blog.csdnimg.cn/direct/d9bc8e2f1bb64b8f9c7c0f981976fcc0.png)
生成器函数:是一个带yield语句的函数,yield表示函数执行的暂停。yield 语句返回一个值给调用者并暂停执行。当生成器的next()方法被调用的时候,它会准确地从离开地方继续。
![](https://img-blog.csdnimg.cn/direct/aff458c73e4d43ddbe2feb8633275ef4.png)
![](https://img-blog.csdnimg.cn/direct/966f6b5b5b83494a85fb197a0078d9f7.png)
练习:文件生成器。
使用函数实现生成器yield,函数接受一个文件路径作为参数(读文件),生成器函数每次返回文件的10行数据。
![](https://img-blog.csdnimg.cn/direct/a2d48d2f4f954b63a93052ed8ab3ab14.png)
![](https://img-blog.csdnimg.cn/direct/78260a7218af481da4b4082126b800b7.png)