python学习框架分为继承、多态、文件操作、线程、进程、协程、正则表达式与加密。
树图思维导图提供 python学习重点框架思维导图 在线思维导图免费制作,点击“编辑”按钮,可对 python学习重点框架思维导图 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:5a222f51f399e5331ac59b773055cf13
python思维导图模板大纲
单继承
class 类名(父类名): 代码
子类继承父类之后可以直接使用
对象名.方法名()
多继承
class 类名(父类名1, 父类名2..): 代码
有重复的,先继承谁就用谁的
__mro__
使用
类名.__mro__
查看继承的顺序
重写
子类继承父类之后可以重新定义并覆盖父类的方法
子类添加功能
父类名.方法名(self)
super().方法名()
super(子类名,self).方法名()
封装
在方法或属性前加(__)两个下划线
成为私有属性或私有方法
私有属性
外部无法访问,内部可以访问
self.私有属性
私有方法
外部无法访问,内部可以访问
类名.私有方法(self)
self.私有方法()
同一种事物的多种形态
静态方法
@staticmethod
类中的函数,不需要实例话对象就可以直接调用类中的函数
访问类属性
类名.属性名
不能访问实例属性
类方法
@classmethod
定义完类方法之后,再定义的函数括号内是【(cls)/类对象】
调用
使用类名直接调用
类名.类方法()
使用类对象调用
先实例化对象 然后用对象名.方法名()
不能访问实例属性
访问类属性
类对象.类属性
实例方法
访问实例属性
self.实例属性
访问类属性
类名/self.类属性名
打开文件
open('文件路径','打开模式')
打开模式不填,默认只读
返回文件的路径/名称
文件名.name
返回文件的访问模式
文件名.mode
返回文件的编码格式
文件名.encoding
读取数据
文件名.read(num)
num表示读取的长度 不填读取全部
文件名.readline()
一次读取一行内容
文件名.readlines()
一次性读完
写入内容
文件名.write(‘ 给一个 ’)
关闭文件
文件名.close()
查看是否关闭
文件名.closed
访问模式(mode)
r
只读
不存在报错
w
只写
不存在新建,存在重写
a
追加可写
不存在新建,存在在内容后填写
+
可读可写
r+ w+ a+
可读可写
rb wb ab
以二进制打开文件
更加节省空间
文件名.tell()
文件名.seek(偏移量,起始位置)
起始位置
0
文件开头
1
当前位置
2
文件结尾
with表达式
with open(文件路径, mode,encoding=‘ 编码格式 ’) as 别名:
此表达式会自动调用close()
编码格式在不符合的情况下才使用
单线程
程序一个一个的运行
多线程
多个程序同时运行
多线程的实现
导入模块
threading
创建子线程
Thread类
语法:模块名.Thread
Thread([group[,targe[,name[,args[,kwargs]]]]])
group
线程组,目前只能使用None
target
执行的目标任务名
name
线程名,一般不用设置
args
以元组方式给执行任务传参
kwargs
以字典方式给执行任务传参
守护线程
setDaemon()
子线程名字.setDaemon(False)
默认关闭,需要开启
daemon
子线程名.daemon=True
强制结束子线程,主线程结束的时候,子线程也跟着结束
开启子线程
start()
子线程名.start()
阻塞主线程
join()
子线程名.start()
表示让当前子线程先运行,阻塞主线程
加锁
创建锁
lock = lock()
上锁
lock.acquire()
在函数内部的开头位置
释放锁
lock.release()
在函数内部结尾的位置
注意
线程共享全局变量(资源共享)
加锁是把多任务转换成单任务,谁先抢到执行谁
进程的状态
就绪态
代码已经写好,等待运行
运行态
代码正在运行中
阻塞态
代码处于等待状态
休眠
input()
查看子进程的名字
子进程名.name
修改子进程名字
使用Process中的name修改
子进程名.name = ‘修改的名字’
进程号
目的
验证主进程和子进程的关系,知道子进程由哪个主进程创建出来的
语法
子进程名.pid
查看子进程号
导入系统模块os
os.getpid()
查看子进程号
os.getppid()
查看父进程号
进程的使用
start()
启动进程
is_alive()
判断进程是否活着
活着返回True
死亡返回False
join()
主进程等待子进程运行
进程通信
Queue
是类中的模块
使用时需要初始化对象
变量名 = Queue()
括号内为可以接受的数量,不填无限接受
变量名来调用
qsize()
返回当前队列包含的消息数量
empty()
如果队列为空,返回True
full
如果队列为满,返回True
put()
放入数据
get()
取出数据
Queue本身是一个消息列队程序
通过创建一个列队对象来进行传参到函数中 从而实现进程之间的资源共享
进程池
语法
导入类的模块
注意
子进程一般都在主进程后面执行
查看进程命令
tasklist
进入命令提示符输入并回车
子进程id不同,父进程id相同
进程之间不共享全局变量(资源不共享)
手动切换
1. 导入模块
greenlet
由于是第三方模块,所以需要下载
在pycharm中
file--setting--project--‘+’--输入模块名--install package
文件下方 Termianl--输入 pip install 模块名
命令提示符cmd
pip install 模块名
查看已下载的模块
命令提示符cmd
pip list
2. 实例化协程对象
greenlet(任务名)
3. 调用函数
对象名.switch()
switch() 协程切换
传参
args
以元组的形式传参
kwargs
以字典的形式传参
自动切换
1. 导入gevent 模块
同上
2. 实例化协程对象 需要调用spawn()函数
模块名.spawn(任务名)
3. 调用函数
调用join()函数
对象名.join()
需要打补丁
导入模块 monkey
语法: monkey.patch_all()
注意要放在被打补丁的前面
使用模块中自带的 sleep()
gevent.sleep()
调用joinall()
gevent.joinall([对象名, 对象名])
概念:
正则表达就是记录文本规则的代码
语法
语法1
导入 re 模块
使用方法进行操作
使用match方法进行操作
match方法匹配时是从头开始匹配的
match('匹配的正则表达式' , '要匹配的字符串','标志位')
标志位是匹配类型,一般不用管
匹配成功,返回匹配的数据 匹配失败,返回None
使用search方法进行操作
扫描整个字符串,找到第一个匹配成功的数据
search('匹配的正则表达式' , '要匹配的字符串','标志位')
使用group方法提取数据
对象名.group()
匹配失败时,不能提取数据
语法2
导入 re 模块
使用 findall方法
扫描整个字符串,找出所有符合匹配的字符串
findall('匹配的正则表达式' , '要匹配的字符串','标志位')
打印对象名
匹配单个字符
.
匹配任意一个字符,除了\n
[ ]
匹配[ ]中列举的一个字符
\d
匹配数字,0 -- 9
\D
匹配非数字,不是数字的
\s
匹配空格
\S
匹配非空格
\w
匹配单词字符,【a -- z 】 【A -- Z】【0 -- 9】 【 _ 】 【汉字】
\W
匹配非单词字符
匹配多个字符
修饰单个字符
*
匹配前一个字符出现0次或无限次
+
匹配前一个字符出现1次或无限次
?
匹配前一个字符出现0次或无限次
{ m }
匹配前一个字符出现m次
{ m,n }
匹配前一个字符出现从m到n次
注意
匹配前一个字符意思是,所修饰的单个字符
匹配开头和结尾
^
匹配字符串以什么开头
$
匹配字符串以什么结尾
[^指定字符]
除了指定字符以外都匹配
匹配分组
|
表示左右的任意一边字符
(ab)
将括号中字符作为一个分组
\num
引用分组
有重复的时候使用,从内到外逐渐减少
了解
(?P<别名>)正则表达式
(?P=name)
引用
匹配
贪婪匹配
在满足匹配时,尽可能多的匹配
非贪婪匹配
在满足匹配时,尽可能少的匹配
使用问号表示非贪婪匹配
在正则表达式后面作修饰
encode()
加密
decode()
解密