黑马Python语言进阶课程笔记(个人记录、仅供参考)
一、前言
B站视频标题为:黑马程序员大模型Python语言进阶全套视频课程,从面向对象到数据结构与算法知识精讲+项目实战一套搞定。本博客为个人学习笔记,方便自己复习,仅供参考
二、面向对象基础
1、今日内容大纲介绍

2、面向过程和面向对象初识






3、封装简介




4、继承和多态简介





5、定义类格式介绍





6、创建对象及访问类中行为





7、self关键字_入门





8、类内和类外如何访问类中的函数(行为)




9、面向对象案例_手机类





10、类外_设置和获取对象的属性






11、类内_获取对象的属性






12、魔法方法_init_函数_无参版








13、魔法方法_init_函数_有参版





14、魔法方法_str




15、魔法方法_del





16、案例_减肥案例




17、案例_烤地瓜案例







18、定义类的三种格式介绍



19、继承入门







20、单继承入门





21、单继承案例_煎饼果子




22、多继承案例_煎饼果子






三、面向对象高级
1、子类重写父类功能




2、子类访问父类成员_方式1









3、子类访问父类成员_方式2



4、多层继承




5、封装的解释









6、多态入门




7、多态案例_构建对战平台








8、抽象类案例_空调案例











9、对象属性和类属性介绍






10、类方法与静态方法介绍






11、学生管理系统_思路分析





12、学生管理系统_学生类代码编写


13、学生管理系统_学生管理系统代码编写










14、学生管理系统_入口文件


15、学生管理系统_添加学生信息


16、学生管理系统_查看所有学生信息


17、学生管理系统_删除学生信息


18、学生管理系统_修改学生信息

19、学生管理系统_查询单个学生信息

20、拓展_dict属性



21、学生管理系统_保存学生信息



22、学生管理系统_加载学生信息



23、学生管理系统_完整实现










四、闭包和装饰器
1、闭包背景介绍




2、闭包入门







3、闭包图解




4、nonlocal关键字详解



5、闭包总结

6、装饰器入门_传统写法





7、装饰器入门_语法糖写法



8、装饰器案例_无参无返回值的原函数






9、装饰器案例_有参无返回值的原函数




10、装饰器案例_无参有返回值的原函数




11、装饰器案例_有参有返回的原函数



12、装饰器案例_可变参数



13、装饰器案例_多个装饰器装饰1个函数




14、装饰器案例_带参数的装饰器





15、装饰器案例_带参数的装饰器_优化





16、浅拷贝_操作可变类型








17、浅拷贝_操作不可变类型

18、深拷贝_操作可变和不可变类型


五、网编与多线程
1、内容大纲介绍

2、网络编程简介















3、TCP协议介绍








4、创建Socket对象






5、网编案例_一句话_服务器端代码









6、网编案例_一句话_客户端代码


注意填写IP地址肯定是和老师视频中不一样的,在cmd命令行中通过ipconfig命令查出Ipv4的地址填写上去



7、拓展_编解码问题




8、设置端口号重用





9、网编案例_一句话_模拟多服务器端代码

10、网编案例_文件上传






11、网编案例_文件上传_模拟多任务版






12、多任务介绍_并行_并发







13、单进程代码演示





14、多进程_入门案例






15、多进程_入门案例_带参数




16、多进程_如何获取进程id







17、进程特点_数据隔离







18、进程特点_守护进程





守护进程 是用来守护 非守护进程的。一旦非守护进程退出,则它的所有守护进程都得销毁。eg:水晶就是非守护进程,守家的玩家就是守护进程,水晶爆了所有守家的玩家也就结束了




但是Java中不太一样,如果main进程退出之后它还会再挣扎着打印几次,原因是多线程的执行具有延迟性


19、线程介绍






20、线程入门_无参数案例







21、线程入门_带参数案例





六、生成器与正则表达式
1、拓展题讲解






切片的本质是浅拷贝


2、线程特点_随机性





3、线程特点_守护线程

出现划掉的线不是不能用,而是已过时,不推荐使用





4、线程特点_数据共享




5、线程特点_操作共享变量_出问题

线程1拿到global_num = 0,在函数1开始累加一次之前资源被线程2抢走了。此时线程2拿到的global_num也是0。然后线程1重新抢回资源累加一次之后把global_num = 1传回去,随后线程2抢回资源累加一次之后也是把global_num = 1传回去。这样就出现了明明两个函数都已经累加一次(即理论global_num = 2),但是最后global_num的值却是1


6、多线程_互斥锁










7、线程和进程的区别






8、迭代器介绍







9、生成器_推导式写法




10、生成器_yield关键字



11、生成器案例_批次歌词数据






12、Property属性_装饰器用法




13、Property属性_类属性用法







14、正则替换





15、正则校验_单个字符











16、正则校验_多个字符







17、正则校验_开头和结尾

18、正则校验_提取分组数据






19、正则校验_提取邮箱域名




20、正则校验_提取QQ号




21、正则校验_html标签




七、算法详解_链表
1、数据结构和算法简介





2、算法的特性





3、如何衡量算法的优劣





4、大O标记法介绍







5、时间复杂度计算方式







6、最优和最坏时间复杂度计算




7、常见时间复杂度介绍




8、常见的空间复杂度介绍





9、数据结构与算法概述回顾





10、数据结构的分类






11、顺序表存储数据方式的介绍







12、递归入门案例_求阶乘




13、顺序表扩容策略介绍




14、顺序表添加和删除元素



15、链表简介









16、自定义代码模拟链表_思路分析




17、自定义代码模拟链表_框架搭建


18、自定义代码模拟链表_判断是否为空



19、自定义代码模拟链表_计算长度



20、自定义代码模拟链表_遍历链表



21、自定义代码模拟链表_往头部添加元素
注意:1和2的顺序不能变




22、自定义代码模拟链表_往尾部添加元素




23、自定义代码模拟链表_往中间插入元素





24、自定义代码模拟链表_删除元素





25、自定义代码模拟链表_查找元素






八、算法详解_二叉树
1、排序算法稳定性介绍




2、冒泡排序_思路分析




3、冒泡排序_代码实现




4、选择排序_思路分析



5、选择排序_代码实现
下面的代码实现是外层用j,内层用i,和自己写的习惯不一样

选择排序是不稳定的






6、插入排序_思路和代码











7、二分查找_递归版





8、二分查找_非递归版


9、树结构简介




10、树的常用分类








11、完全二叉树常用公式介绍




12、自定义代码模拟二叉树_框架搭建






13、自定义代码模拟二叉树_添加节点的思路





14、自定义代码模拟二叉树_添加节点代码实现

15、自定义代码模拟二叉树_广度优先遍历




16、深度遍历_前序中序后序解释


17、自定义代码模拟二叉树_深度遍历_代码实现



18、根据先序和中序_逆推二叉树结构


九、拓展内容
1、快速排序_代码实现









2、快速排序_图解


