Python 学习路线 · 由易到难(全面版)

10 个难度梯度板块 · 44 个最小单元 · 每单元含 概念/例题/复盘/练习 + 视频链接
脊梁:OCR 还原的《Python 从入门到项目实践》(明日科技·王国辉/李磊/冯春龙,吉林大学出版社,2018)真实 30 章结构;为"较全面"补充虚拟环境、函数进阶、标准库、异步、数据科学、工程化(git/测试/部署) 等拓展单元。
说明:原文件名为「Python从入门到精通.pdf」,经 OCR 确认为《Python 从入门到项目实践》。书中含独立"第11章 用函数实现模块化程序设计",已据实纳入。章节编号按原书顺序整理,便于对照实体书。
Python 学习路线 L0 · 起步与环境 环境搭建与第一个程序 PyCharm 开发环境 虚拟环境与包管理 代码规范·注释·缩进 L1 · 基础语法 变量与基本数据类型 运算符 输入与输出 字符串处理 列表和元组 L2 · 控制流与容器 流程控制 if 循环结构 for/whi… 字典与集合 综合:四大容器对比 L3 · 函数与面向对象 函数:定义/参数/返回值 函数进阶:lambda/… 类与对象(面向对象) L4 · 模块·文件·标准库 模块与包 文件与 IO 正则表达式 常用标准库 异常处理与程序调试 L5 · 数据与持久化 操作数据库 SQLite… JSON / CSV /… 数据科学基础 NumPy… L6 · 并发与网络 进程与线程 协程 asyncio 网络编程 L7 · 五大框架 GUI 框架 Tkint… pygame 游戏框架 网络爬虫框架 Flask Web 框架 Django Web 框架 L8 · 工程化与质量 单元测试 unittes… 日志 logging 项目打包与部署 版本控制 git L9 · 项目实战(综合) 谷歌小恐龙游戏 飞机大战游戏 微信跳一跳辅助工具 汽车之家图片抓取工具 AI 图像识别工具 e起去旅行网站 看店宝(京东版) 拓展方向:数据分析 / …
怎么用:先看上方思维导图建立全局观;再按 L0→L9 顺序推进;点开每个单元看 ①概念 ②例题 ③复盘 ④练习 ⑤视频;标注「整合建议」的板块可把相邻单元合并成专题集中突破。视频链接中标注具体 BV 号的为已验证课程,其余为 B站搜索直达。

L0 起步与环境 · 准备篇

动手之前先把工具链搭好:装解释器、选编辑器、会用虚拟环境和代码规范,后面才不会在环境上卡壳。
整合建议:这四块环环相扣:先装 Python 与 PyCharm(书 ch1-2),再用 venv 隔离项目依赖,最后用 PEP8 规范统一代码风格。建议 L0 一天走完。
单元 1环境搭建与第一个程序(第1章 踏上Python之旅)5 个知识点 ▾
Python 版本安装IDLE第一个程序环境变量
① 概念
Python 是解释型语言,写好的 .py 文件由解释器逐行执行。先装好 Python(书用 3.7,建议用 3.10+),配置好 PATH,再用 IDLE 或终端运行第一段代码。
② 例题
# hello.py
print('Hello, Python!')
# 终端:python hello.py
③ 复盘
  • 解释器的作用:把 .py 源码翻译成机器能跑的指令
  • 确认 python --version 能正确显示版本
  • 遇到 'python 不是内部或外部命令' → 多半是 PATH 没配好
④ 练习
  • 在官网下载并安装 Python,勾选 'Add to PATH'
  • 用 IDLE 写下 print('你好,世界') 并运行
单元 2PyCharm 开发环境(第2章 熟悉PyCharm开发环境)5 个知识点 ▾
PyCharm 安装创建工程运行/调试断点配置
① 概念
PyCharm 是 Python 最常用的 IDE,提供代码补全、断点调试、版本控制集成。核心动作:新建 Project → 选 Python 解释器 → 建 .py → 右键 Run / Debug。
② 例题
# 在 PyCharm 中:
# 1) 新建项目,指定 interpreter
# 2) 新建 hello.py,写 print('hi')
# 3) 左侧行号点一下打'断点',点 Debug 单步执行
③ 复盘
  • Project 与 interpreter(解释器)必须对应
  • 断点 + Debug 是排查逻辑错误的利器
  • 常用快捷键:运行 Shift+F10 / 调试 Shift+F9
④ 练习
  • 安装 PyCharm 社区版,新建项目并运行一段代码
  • 在循环里打一个断点,用 Debug 观察变量变化
单元 3虚拟环境与包管理(拓展(工程必备))5 个知识点 ▾
venvpiprequirements.txt包管理依赖隔离
① 概念
不同项目需要不同版本的第三方库,虚拟环境(venv)为每个项目隔离依赖。pip 是包管理器,requirements.txt 记录依赖清单,方便复现环境。
② 例题
python -m venv venv      # 创建虚拟环境
source venv/bin/activate  # 激活(Linux/Mac)
venv\Scripts\activate     # 激活(Windows)
pip install requests       # 装包
pip freeze > requirements.txt  # 导出依赖
③ 复盘
  • 虚拟环境避免'全局污染'和版本冲突
  • 激活后再 pip install,包装在当前环境
  • requirements.txt 是协作/部署的'环境说明书'
④ 练习
  • 为练习项目创建 venv 并激活
  • 安装 requests,并把依赖写入 requirements.txt
单元 4代码规范·注释·缩进(第3章 3.2–3.5(注释/缩进/编码/命名规范))5 个知识点 ▾
PEP8缩进单行/多行注释命名规范中文编码声明
① 概念
Python 用缩进表示代码块(强制 4 个空格,禁用 Tab 混用)。PEP8 是官方风格指南:变量/函数用小写蛇形(snake_case),类用大驼峰(CamelCase),加有意义的注释与文档字符串。
② 例题
# 单行注释
def calc_area(r):
    '''计算圆面积(文档字符串)'''
    return 3.14159 * r * r
# -*- coding: utf-8 -*-   # 中文编码声明
③ 复盘
  • 缩进错误是新手第一杀手,统一用 4 空格
  • 命名见名知意;常量用全大写下划线
  • 文档字符串 docstring 用三引号,利于生成文档
④ 练习
  • 找一段缩进混乱的代码,按 PEP8 整理重写
  • 给自写函数补上 docstring

L1 基础语法 · 基础篇

Python 的'单词和句子':变量、数据类型、运算符、字符串、列表元组。所有后续内容都建立在这层。
整合建议:书基础篇 ch3-7 本质是'数据 + 操作':变量/运算符操作数据,字符串/列表/元组是三种最常用的序列容器。建议把'序列的通用操作(索引、切片、len、in)'作为一个小专题集中练。
单元 5变量与基本数据类型(第4章 变量与基本数据类型)5 个知识点 ▾
保留字标识符int/floatstr/bool类型转换
① 概念
变量是名字指向对象的引用。基本类型:整型 int、浮点 float、字符串 str、布尔 bool、空值 None。type() 看类型,int()/float()/str() 做转换。
② 例题
age = 18          # int
price = 9.9       # float
name = 'Tom'      # str
flag = True       # bool
print(type(age))  # <class 'int'>
③ 复盘
  • 变量无需声明类型,赋值时确定
  • 标识符规则:字母/下划线开头,区分大小写
  • 类型转换失败会抛 ValueError,要预防
④ 练习
  • 定义几个不同类变量并打印类型
  • 输入半径,计算并输出圆的面积(float)
单元 6运算符(第5章 运算符)5 个知识点 ▾
算术比较逻辑赋值成员/身份
① 概念
算术(+ - * / // % **)、比较(== != > <)、逻辑(and or not)、赋值(= +=)、成员(in/not in)、身份(is)。优先级:算术 > 比较 > 逻辑。
② 例题
a, b = 7, 2
print(a // b, a % b, a ** b)   # 3 1 49
print(a > 5 and b < 3)         # True
print('y' in 'python')         # True
③ 复盘
  • // 整除、% 取余、** 幂
  • 逻辑运算符返回的是操作数本身(不只是 True/False)
  • 不确定优先级就用括号,可读性也更好
④ 练习
  • 写一个判断'闰年'的表达式(能被4整除且不能被100整除,或能被400整除)
  • 用 and/or 组合多个条件判断用户名合法性
单元 7输入与输出(第3章 3.1 Python输入与输出)5 个知识点 ▾
print()input()f-string格式化转义字符
① 概念
input() 从键盘读入字符串;print() 输出。Python 3.6+ 推荐 f-string:f'名字={name}',简洁直观。\n 换行、\t 制表符是常见转义。
② 例题
name = input('请输入姓名:')
age = int(input('请输入年龄:'))
print(f'{name} 今年 {age} 岁')
③ 复盘
  • input() 永远返回字符串,数字要 int()/float() 转换
  • f-string 比 % 和 .format() 更好读
  • print 默认换行,end='' 可取消
④ 练习
  • 做一个'对话小程序':问名字和爱好并回显
  • 用 f-string 输出一个对齐的'商品标签'(参考书:输出超市购物小票)
单元 8字符串处理(第7章 字符串与正则表达式(字符串部分))5 个知识点 ▾
字符串方法切片编码格式化常用操作
① 概念
字符串是不可变序列,支持下标、切片、遍历。常用方法:split()/join()/strip()/replace()/upper()/find()。索引从左 0 开始、从右 -1 开始。
② 例题
s = '  Hello,Python  '
print(s.strip().split(','))     # ['Hello', 'Python']
print('py' in s)                # True
print(s[0:5])                  # '  Hell'
③ 复盘
  • 字符串不可变,方法返回新串而非原地改
  • 切片 [start:end:step] 左闭右开
  • strip() 清两端空白,处理用户输入很常用
④ 练习
  • 从 'zhang.san@mail.com' 中提取用户名 'zhang.san'
  • 把一个句子按空格切分并统计单词数
单元 9列表和元组(第6章 列表和元组)5 个知识点 ▾
listtuple增删改查切片列表推导式
① 概念
列表 list 可变有序容器:[1,2,3],支持增删改、嵌套、推导式。元组 tuple 不可变:(1,2,3),适合存固定数据。两者都能用索引/切片/遍历。
② 例题
nums = [1, 2, 3]
nums.append(4)            # [1,2,3,4]
nums[0] = 10               # [10,2,3,4]
squares = [x*x for x in range(5)]  # [0,1,4,9,16]
t = (1, 2)                # tuple 不可改
③ 复盘
  • 列表可变、元组不可变,选择看'要不要改'
  • 列表推导式比 for 追加更简洁高效
  • 负索引 -1 取最后一个元素
④ 练习
  • 用列表推导式生成 1-100 内所有偶数
  • 对一个成绩列表排序并去掉最高最低分求平均

L2 控制流与容器 · 基础篇/进阶篇

让程序'会思考、会重复':条件分支、循环,以及另一类核心容器——字典与集合。
整合建议:书 ch8-10:if/循环 控制'执行路径',字典/集合 是'映射与去重'利器。把'列表/元组/字典/集合'放一起做张对比表,是性价比最高的整合学习。
单元 10流程控制 if(第8章 流程控制)4 个知识点 ▾
if/elif/else嵌套三目运算符条件表达式
① 概念
用 if/elif/else 按条件走不同分支。可嵌套;三目表达式 `a if cond else b` 写简单判断。注意冒号与缩进。
② 例题
score = 85
if score >= 90:
    level = 'A'
elif score >= 60:
    level = 'B'
else:
    level = 'C'
print(level)   # B
③ 复盘
  • 条件为 0/''/None/空容器 时视为 False
  • elif 按顺序匹配,命中即停
  • 复杂条件先拆小,再组合
④ 练习
  • 写程序判断成绩等级(A/B/C/D)
  • 做一个简易计算器:输入两数和操作符输出结果
单元 11循环结构 for/while(第9章 循环结构语句)5 个知识点 ▾
forwhilerange()break/continue嵌套循环
① 概念
for 遍历序列/可迭代对象;while 按条件反复执行。range() 生成整数序列。break 跳出、continue 跳过本次。循环可嵌套。
② 例题
# 九九乘法表
for i in range(1, 10):
    for j in range(1, i+1):
        print(f'{j}*{i}={i*j}', end=' ')
    print()
③ 复盘
  • for 更适合'已知次数/遍历',while 适合'条件驱动'
  • 死循环常因 while 条件永远为真,记得在循环内改变条件
  • range(start, end, step) 左闭右开
④ 练习
  • 打印 1-100 素数
  • 用 while 实现'猜数字'小游戏(带次数限制)
单元 12字典与集合(第10章 字典与集合)5 个知识点 ▾
dictset键值对去重交并差
① 概念
字典 dict 是键值对映射 {key: value},查找极快;集合 set 是无序不重复元素,适合去重与集合运算(交 &、并 |、差 -)。
② 例题
d = {'apple': 3, 'banana': 5}
d['apple'] += 1
print(d.get('pear', 0))     # 0(带默认值)
s = {1, 2, 2, 3}
print(s)                     # {1, 2, 3}
③ 复盘
  • 字典键必须不可变(常用 str/int/tuple)
  • set 自动去重,统计'不重复元素'首选
  • dict.items() 同时取键和值
④ 练习
  • 统计一段文本中各单词出现次数(词频)
  • 给定两个好友列表,用集合运算求共同好友
单元 13综合:四大容器对比(整合(列表/元组/字典/集合))4 个知识点 ▾
序列 vs 映射可变 vs 不可变选型对比表
① 概念
list 有序可改、tuple 有序不可改、dict 键值映射、set 去重无序。选型口诀:要顺序且常改→list;固定数据→tuple;按名查值→dict;去重/集合运算→set。
② 例题
# 同一份'学生'数据三种存法
lst = ['Tom', 18]
tpl = ('Tom', 18)
dic = {'name': 'Tom', 'age': 18}
③ 复盘
  • 容器都支持 len()/in/遍历
  • dict 和 set 基于哈希,查找 O(1)
  • 嵌套容器(如 list of dict)是真实数据的常见形态
④ 练习
  • 给定场景分别选容器并说明理由:①排行榜 ②配置项 ③标签去重 ④坐标点

L3 函数与面向对象 · 进阶篇

从'写脚本'升级到'写可复用、可维护的程序':把代码封装成函数,再用类组织成对象。
整合建议:书 ch11-12:函数让你'一次定义、多次调用';面向对象让你用'类'把数据与操作打包。建议把 ch11 的函数基础 + 拓展的 lambda/装饰器/生成器 作为一个'函数进阶'专题。
单元 14函数:定义/参数/返回值(第11章 用函数实现模块化程序设计)6 个知识点 ▾
def参数默认参数返回值文档字符串作用域
① 概念
用 def 定义函数,参数可设默认值,*args/**kwargs 收可变参数,return 返回结果。函数内为局部作用域,global 声明可改全局变量。
② 例题
def bmi(height, weight=60):
    '''计算 BMI'''
    return weight / (height ** 2)

print(bmi(1.75, 70))
print(bmi(1.75))        # 用默认体重
③ 复盘
  • 函数让代码复用、结构清晰
  • 默认参数放后面;可变参数 *args/**kwargs 兜底
  • 没有 return 时函数返回 None
④ 练习
  • 写函数计算圆面积/周长(参数带默认值)
  • 写函数判断一个数是否为素数并返回布尔
单元 15函数进阶:lambda/闭包/装饰器/生成器(拓展(函数式与高级特性))6 个知识点 ▾
lambda闭包装饰器yield生成器推导式
① 概念
lambda 写匿名小函数;闭包是'函数内返回函数'记住外部变量;装饰器 @ 在不改原函数下加功能;yield 把函数变成按需产值的生成器,省内存。
② 例题
import time
def timer(f):
    def wrap(*a, **k):
        t = time.time(); r = f(*a, **k)
        print('耗时', time.time()-t); return r
    return wrap

@timer
def add(a, b): return a + b

# 生成器
def count():
    i = 0
    while True:
        yield i; i += 1
③ 复盘
  • 装饰器本质是'高阶函数+闭包'
  • 生成器用 yield,按需生成、内存友好
  • 列表推导式 vs 生成器表达式:[] 与 ()
④ 练习
  • 写一个缓存装饰器:重复入参直接返回缓存结果
  • 用生成器实现'斐波那契数列'前 n 项
单元 16类与对象(面向对象)(第12章 类和对象)6 个知识点 ▾
class__init__属性/方法继承多态封装
① 概念
用 class 定义类,__init__ 初始化属性,self 指代实例。继承复用父类,方法重写实现多态,私有属性(_name)体现封装。面向对象把'数据+行为'打包成对象。
② 例题
class Student:
    def __init__(self, name, score):
        self.name = name
        self.score = score
    def level(self):
        return 'A' if self.score >= 90 else 'B'

s = Student('Tom', 95)
print(s.name, s.level())   # Tom A
③ 复盘
  • self 是实例自身,方法第一个参数必写
  • 继承:子类(is-a) 复用并扩展父类
  • 封装用 _ / __ 约定私有,保护内部状态
④ 练习
  • 定义 BankAccount 类:含余额、存款/取款方法并校验余额非负
  • 让 SavingsAccount 继承 BankAccount 并加利息方法(多态)

L4 模块·文件·标准库 · 进阶篇/高级篇

让程序'能组织、能读写、能调用现成轮子':模块拆分代码,文件做持久化,标准库提供海量内置能力。
整合建议:书 ch13-18 串起'代码组织→数据落地→异常处理'。正则与文件常配合使用(如从文本提取并保存),建议把'文件读写 + 正则提取'做成一条小流水线练习。
单元 17模块与包(第13章 模块)5 个知识点 ▾
import自定义模块__name____all__
① 概念
一个 .py 文件就是一个模块;用 import 引入。if __name__ == '__main__' 让文件既能被导入也能独立运行。包是带 __init__.py 的目录,组织多个模块。
② 例题
# mymath.py
def add(a, b): return a + b

# main.py
import mymath
print(mymath.add(1, 2))
③ 复盘
  • 模块避免重复造轮子,也拆分大型项目
  • __name__ 在主文件运行是 '__main__',被导入则是模块名
  • 第三方库用 pip 安装后同样 import
④ 练习
  • 把之前写的 bmi 函数拆到 mytools.py,在另一个文件导入使用
  • 创建一个包(目录+__init__.py)放多个工具模块
单元 18文件与 IO(第14章 文件与IO)6 个知识点 ▾
openread/writewithpathlib编码路径
① 概念
open() 打开文件,'r'读/'w'写/'a'追加,encoding 指定编码。用 with 自动关文件最安全。pathlib 提供面向对象的路径操作。
② 例题
with open('data.txt', 'w', encoding='utf-8') as f:
    f.write('你好,文件')

with open('data.txt', 'r', encoding='utf-8') as f:
    print(f.read())
③ 复盘
  • 务必指定 encoding='utf-8' 防乱码
  • with 语句异常退出也会关闭文件
  • 'w' 会清空原内容,追加用 'a'
④ 练习
  • 把 10 行日志写入文件再读回统计行数
  • 把多个小 txt 合并成一个大文件
单元 19正则表达式(第7章 字符串与正则表达式(正则部分))5 个知识点 ▾
re 模块元字符match/search分组findall
① 概念
正则用模式匹配文本。re.search 找首次、re.findall 找全部、() 分组提取。常用:\d 数字、\w 单词、. 任意、* + ? 量词、^ $ 首尾。
② 例题
import re
text = '电话 13812345678'
m = re.search(r'1[3-9]\d{9}', text)
if m:
    print('手机号:', m.group())
③ 复盘
  • 正则适合'有模式'的文本(电话/邮箱/身份证)
  • match 从开头匹配,search 搜全文
  • 复杂正则是'读得懂比写得炫'重要,多用分组
④ 练习
  • 用正则校验邮箱格式是否合法
  • 从一段文本中提取所有 http(s) 链接
单元 20常用标准库(拓展(os/sys/datetime/json/collections))6 个知识点 ▾
os/pathdatetimejsonmathcollectionsrandom
① 概念
Python 自带'电池':os 管文件目录、datetime 管时间、json 管数据交换、math 数学、collections 提供 Counter/defaultdict 等高级容器、random 随机数。
② 例题
import os, json, datetime
print(os.listdir('.'))
print(datetime.date.today())
d = {'a': 1}
print(json.dumps(d, ensure_ascii=False))
③ 复盘
  • 标准库无需安装,开箱即用
  • json 是前后端/接口数据交换的事实标准
  • collections.Counter 一行统计词频
④ 练习
  • 用 os 批量重命名某文件夹下的 .txt 文件
  • 用 datetime 计算两个日期相差天数
单元 21异常处理与程序调试(第18章 异常处理及程序调试)5 个知识点 ▾
try/exceptelse/finallyraise断言调试
① 概念
用 try/except 捕获异常避免崩溃;else 无异常时执行、finally 必执行。raise 主动抛错,assert 做断言。调试靠 print/日志/断点定位。
② 例题
try:
    n = int(input('数:'))
    print(10 / n)
except ValueError:
    print('请输入整数')
except ZeroDivisionError:
    print('不能除以0')
finally:
    print('结束')
③ 复盘
  • 捕获'预期'的异常,别用裸 except: 吞掉所有错
  • finally 常用于释放资源(关文件/连接)
  • 调试先复现、再二分定位、最后加日志
④ 练习
  • 改写'用户输入两个数相除',对各类异常温柔提示
  • 用 assert 校验函数入参非空

L5 数据与持久化 · 高级篇

把数据真正'存起来、算出来':关系型数据库、结构化文件(JSON/CSV/Excel),以及数据分析三件套。
整合建议:书 ch15 + 拓展:数据库适合'结构化、需查询'的数据;JSON/CSV 适合'交换与轻量存储';NumPy/Pandas 是'数据分析'主战场。三者可串成'爬/读→存数据库→用 Pandas 分析'的流水线。
单元 22操作数据库 SQLite/MySQL(第15章 使用Python操作数据库)5 个知识点 ▾
sqlite3pymysql建表增删改查参数化
① 概念
sqlite3 是 Python 内置轻量数据库,适合练习;pymysql 连 MySQL。用游标执行 SQL,参数化查询(? 占位)防 SQL 注入。
② 例题
import sqlite3
con = sqlite3.connect('test.db')
con.execute('CREATE TABLE IF NOT EXISTS stu(name TEXT, age INT)')
con.execute('INSERT INTO stu VALUES (?,?)', ('Tom', 18))
con.commit()
for r in con.execute('SELECT * FROM stu'):
    print(r)
③ 复盘
  • 改数据后必须 commit() 才生效
  • 永远用参数化(? 占位),别字符串拼接 SQL
  • 用完关连接,或用 with 管理
④ 练习
  • 建一个'图书'表,实现增/查/改/删四个函数
  • 把 L4 的词频结果写入数据库并按次数排序查出 Top10
单元 23JSON / CSV / Excel 处理(拓展(数据交换与办公))5 个知识点 ▾
jsoncsvopenpyxl序列化表格读写
① 概念
json 模块做字典↔字符串序列化,是接口/配置文件主流;csv 模块读写表格;openpyxl 读写 .xlsx(Excel)。
② 例题
import json, csv
json.dump({'a':1}, open('c.json','w',encoding='utf-8'), ensure_ascii=False)
data = json.load(open('c.json', encoding='utf-8'))

import csv
with open('t.csv','w',newline='',encoding='utf-8') as f:
    csv.writer(f).writerow(['name','age'])
③ 复盘
  • JSON 不支持 tuple/set,会转成 list
  • 写 csv 注意 newline='' 防空行
  • 读 Excel 用 openpyxl / pandas 更省事
④ 练习
  • 把学生列表写入 CSV,再读回成字典列表
  • 用 openpyxl 创建一个带表头的成绩表并填数
单元 24数据科学基础 NumPy/Pandas/Matplotlib(拓展(数据分析方向))5 个知识点 ▾
ndarraySeriesDataFrame分组聚合可视化
① 概念
NumPy 提供高性能数组 ndarray;Pandas 的 Series/DataFrame 像带列的表格,做清洗、分组、统计;Matplotlib 画图。三者是数据分析/AI 的通用底座。
② 例题
import pandas as pd, matplotlib.pyplot as plt
df = pd.DataFrame({'score':[80,90,70,85]})
print(df['score'].mean())
df['score'].plot(kind='bar'); plt.show()
③ 复盘
  • DataFrame 是'带标签的二维表',列运算向量化很快
  • NaN 表示缺失值,用 dropna/fillna 处理
  • 可视化前先想清楚'要表达什么关系'
④ 练习
  • 用 Pandas 读一个 CSV 并计算每列均值/最值
  • 画一张'各城市销量'柱状图

L6 并发与网络 · 高级篇

让程序'同时做多件事、能联网':多线程多进程压榨 CPU/IO,socket/requests 打通网络世界。
整合建议:书 ch16-17:进程/线程解决'并发'(爬虫、批量下载最常用);网络编程解决'对外通信'。异步 asyncio 是更高阶的并发模型,建议在线程之后了解。
单元 25进程与线程(第16章 进程和线程)5 个知识点 ▾
threadingmultiprocessingGILLockQueue
① 概念
线程 threading 适合 IO 密集(如网络/文件),进程 multiprocessing 适合 CPU 密集。Python 有 GIL,多线程并行受限;共享变量要用 Lock 保护。
② 例题
import threading

def task(n):
    print('任务', n)

for i in range(3):
    threading.Thread(target=task, args=(i,)).start()
③ 复盘
  • IO 密集→多线程;CPU 密集→多进程
  • GIL 让同一进程内多线程不能真并行 CPU
  • 多线程改共享变量要加锁,否则数据错乱
④ 练习
  • 用多线程同时下载 3 个网页并计总大小
  • 用 Lock 保护一个被多个线程累加的计数器
单元 26协程 asyncio(拓展(异步并发))4 个知识点 ▾
async/awaitasyncioaiohttp事件循环
① 概念
协程用 async/await 在单线程内实现'协作式并发',特别适合海量 IO(高并发网络请求)。asyncio 管理事件循环,aiohttp 做异步 HTTP。
② 例题
import asyncio
async def hi():
    print('hello')
    await asyncio.sleep(1)
    print('world')

asyncio.run(hi())
③ 复盘
  • async 函数返回协程对象,需事件循环驱动
  • await 让出控制权,不阻塞线程
  • 异步适合'大量等待 IO',不是万能加速
④ 练习
  • 用 asyncio + aiohttp 并发请求 5 个网址
  • 对比同步 vs 异步请求同一组 URL 的耗时
单元 27网络编程(第17章 网络编程)5 个知识点 ▾
socketTCPrequestsHTTPAPI 调用
① 概念
socket 是网络通信底层原语(TCP/UDP);实际开发多用 requests 库发 HTTP 请求、调 RESTful API。理解 请求-响应 模型与状态码即可上手。
② 例题
import requests
r = requests.get('https://api.github.com')
print(r.status_code, r.json())
# 带参数
r2 = requests.get('https://httpbin.org/get', params={'q': 'python'})
③ 复盘
  • requests.get/post 覆盖 90% 接口调用
  • 状态码 2xx 成功、4xx 客户端错、5xx 服务端错
  • 返回 JSON 用 r.json() 解析
④ 练习
  • 调用一个公开 API(如天气/笑话)并打印结果
  • 用 requests 下载一张网络图片到本地

L7 五大框架 · 框架篇

书第4篇:GUI、pygame、爬虫、Flask、Django——五个做项目最高频的框架,让你专注业务逻辑。
整合建议:书 ch19-23 五个框架各解决一类需求:界面(GUI)、游戏(pygame)、抓取(爬虫)、轻量Web(Flask)、重型Web(Django)。建议'爬虫+Flask/Django'组合做数据类项目,'pygame+GUI'组合做交互类项目。
单元 28GUI 框架 Tkinter/PyQt(第19章 常用的GUI框架)4 个知识点 ▾
Tkinter窗口/控件事件绑定PyQt 简介
① 概念
Tkinter 是 Python 自带 GUI 库,适合做小工具;PyQt 功能更强、界面更现代。核心是'窗口 + 控件(Label/Button/Entry) + 事件回调'。
② 例题
import tkinter as tk
root = tk.Tk(); root.title('计算器')
tk.Button(root, text='点我', command=lambda: print('hi')).pack()
root.mainloop()
③ 复盘
  • mainloop() 启动事件循环,窗口才显示
  • command 绑定点击事件
  • 复杂界面优先 PyQt/PySide
④ 练习
  • 用 Tkinter 做一个简易计算器界面
  • 做一个'待办列表'小工具(增/删/显示)
单元 29pygame 游戏框架(第20章 pygame游戏框架)5 个知识点 ▾
游戏循环Surface/Rect事件精灵碰撞
① 概念
pygame 做 2D 小游戏:游戏循环不断 处理事件→更新状态→重绘画面;Sprite 管理可移动对象;Rect 做碰撞检测。
② 例题
import pygame
pygame.init()
screen = pygame.display.set_mode((400, 300))
while True:
    for e in pygame.event.get():
        if e.type == pygame.QUIT: pygame.quit(); exit()
    pygame.display.flip()
③ 复盘
  • 游戏循环三件套:事件/更新/绘制
  • clock.tick(FPS) 控制帧率
  • 碰撞用 Rect.colliderect()
④ 练习
  • 让一个方块用方向键移动(边界限制)
  • 做一个'接球'小游戏:挡板接住下落的球
单元 30网络爬虫框架(第21章 网络爬虫框架)5 个知识点 ▾
requestsBeautifulSoupXPath反爬数据存储
① 概念
爬虫=请求网页+解析内容+保存数据。requests 发请求,BeautifulSoup/XPath 解析 HTML,遇到反爬用 请求头/代理/延时;结果存 CSV/数据库。
② 例题
import requests
from bs4 import BeautifulSoup
html = requests.get('https://example.com', headers={'User-Agent':'Mozilla/5.0'}).text
soup = BeautifulSoup(html, 'html.parser')
print(soup.title.text)
③ 复盘
  • 先看懂网页结构(Elements)再写解析
  • 加 User-Agent 模拟浏览器,降低被拦
  • 遵守 robots.txt,控制频率,别给服务器加压
④ 练习
  • 爬取一个博客首页的所有文章标题
  • 爬取天气网站并保存为 CSV(参考书:汽车之家图片抓取)
单元 31Flask Web 框架(第22章 Flask Web框架的使用)5 个知识点 ▾
路由视图函数Jinja2ORM轻量
① 概念
Flask 轻量灵活:@app.route 绑定 URL 与视图函数,Jinja2 渲染模板,适合 API 和小型站点。一个文件就能起服务。
② 例题
from flask import Flask
app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello Flask!'

if __name__ == '__main__':
    app.run(debug=True)
③ 复盘
  • 路由即 URL→函数的映射
  • 模板把 Python 数据塞进 HTML
  • debug=True 改代码自动重启(仅开发用)
④ 练习
  • 写路由 /hello/<name> 回显问候
  • 用 Flask 做一个简易'留言板'(内存存储即可)
单元 32Django Web 框架(第23章 Django Web框架的使用)5 个知识点 ▾
MTVORMAdmin路由模型
① 概念
Django'全家桶':MTV 架构(模型/模板/视图),自带 ORM(用 Python 类建表)、Admin 后台、用户认证,适合中大型站点,开箱即用。
② 例题
# models.py
from django.db import models
class Article(models.Model):
    title = models.CharField(max_length=100)
    body = models.TextField()
# 迁移后自动建表,Admin 可直接增删改
③ 复盘
  • Django 重'约定优于配置',目录结构固定
  • ORM 让你用 Python 操作数据库,不写 SQL
  • Admin 后台省去自己写管理界面
④ 练习
  • 用 Django 建一个 Blog 应用(Article 模型+列表页)
  • 启动 Admin 并在后台增删文章

L8 工程化与质量 · 拓展(工程能力)

从'能跑'到'可靠、可协作、可交付':测试保证正确,日志便于排查,git 管理版本,打包部署上线。
整合建议:这四块是'职业化'分水岭:单元测试 + 日志 保证质量,git 支撑协作,打包/部署 完成交付。建议在第一个完整项目里全部用上。
单元 33单元测试 unittest/pytest(拓展(测试))5 个知识点 ▾
unittestpytest断言测试用例覆盖率
① 概念
测试用小例子验证函数/模块行为。unittest 是标准库,pytest 更简洁。核心:写测试用例 + assert 断言,回归时一键跑。
② 例题
# test_math.py
import pytest
def add(a, b): return a + b

def test_add():
    assert add(1, 2) == 3
    assert add(-1, 1) == 0
# 终端:pytest
③ 复盘
  • 测试越早写,修 bug 越便宜
  • 一个函数至少覆盖正常/边界/异常
  • pytest 自动发现 test_ 开头的函数
④ 练习
  • 给你写的 bmi 函数写 3 个测试用例
  • 用 pytest 跑通并查看是否全绿
单元 34日志 logging(拓展(日志))4 个知识点 ▾
logging级别handler替代print
① 概念
logging 比 print 专业:分 DEBUG/INFO/WARNING/ERROR 级别,可同时输出到控制台和文件,方便生产环境排查。
② 例题
import logging
logging.basicConfig(level=logging.INFO,
    format='%(asctime)s %(levelname)s %(message)s')
logging.info('开始处理')
logging.error('出错了')
③ 复盘
  • 别再用 print 做'伪日志'
  • 级别过滤:生产常用 INFO+
  • handler 可同时写文件+发邮件
④ 练习
  • 把之前脚本里的 print 调试改成 logging
  • 配置日志同时输出到文件
单元 35项目打包与部署(拓展(交付))4 个知识点 ▾
PyInstaller虚拟环境服务器Docker 简介
① 概念
PyInstaller 把 .py 打包成 exe/可执行文件,发给无 Python 环境的人;真正上线多用虚拟环境 + 服务器(Linux)或容器(Docker)。
② 例题
# 打包成单文件 exe
pyinstaller -F app.py
# Dockerfile 简述
# FROM python:3.11
# COPY . /app && RUN pip install -r requirements.txt
# CMD ["python","app.py"]
③ 复盘
  • -F 单文件便于分发,-D 多文件启动更快
  • 部署前冻结 requirements.txt
  • Docker 让'在我机器能跑'变成'到处能跑'
④ 练习
  • 用 PyInstaller 把自己的小工具打包成 exe
  • 写一个最小 Dockerfile 运行 hello 脚本
单元 36版本控制 git(拓展(协作))5 个知识点 ▾
initadd/commitbranchremoteGitHub
① 概念
git 记录每次改动,支持分支并行开发与回滚。工作流:git add 暂存 → commit 提交 → push 推到 GitHub 远程仓库;branch 开新功能,merge 合并。
② 例题
git init
git add .
git commit -m 'init'
git branch dev
git checkout dev
# 改完:git add . && git commit -m 'feat'
git push origin main
③ 复盘
  • commit 要'小步快跑'、信息写清楚
  • 分支隔离风险,主分支保持可运行
  • .gitignore 忽略 venv/缓存等无需跟踪的文件
④ 练习
  • 初始化一个 git 仓库并提交首个版本
  • 新建 dev 分支开发小功能,再合并回 main 并 push 到 GitHub

L9 项目实战(综合) · 游戏/AI/商业篇

书第5-7篇的 7 个完整项目 + 拓展方向,把前面所有能力'串成作品'。做完这些,你就真正入门了。
整合建议:书 ch24-30:游戏类(小恐龙/飞机大战/跳一跳)练 pygame+面向对象;AI类(图片抓取/图像识别)练 爬虫+OpenCV;商业类(旅游网站/看店宝)练 Web全栈+定时任务。建议每类至少做一个,再补一个'数据分析/自动化办公'综合项目。
单元 37谷歌小恐龙游戏(第24章 谷歌小恐龙游戏)4 个知识点 ▾
自动跳跃碰撞检测计分速度递增
① 概念
复刻 Chrome 离线小游戏:障碍物随机出现,按键/自动跳跃躲避,碰撞即结束,分数随时间增长、速度递增。
② 例题
# 思路骨架(pygame)
# 恐龙 Rect、障碍 Rect;
# 每帧: 障碍左移 → 检测碰撞 → 跳跃键置恐龙离地
# 分数 += 1;speed 随时间提升
③ 复盘
  • 核心是'生成障碍 + 碰撞判定 + 计分'循环
  • 难度曲线靠逐步提速实现
  • 可加'自动游玩'AI 练图像识别思路
④ 练习
  • 实现可手动控制的恐龙躲避障碍
  • 加入最高分记录(存文件)
单元 38飞机大战游戏(第25章 飞机大战游戏)4 个知识点 ▾
飞机精灵子弹敌机生成爆炸/音效
① 概念
经典纵版射击:玩家飞机发射子弹,敌机成批出现,击中得分、被撞扣血,含爆炸特效与音效。
② 例题
# 用 Sprite 组织:Player/Enemy/Bullet
# 玩家移动→生成子弹→子弹上移
# 敌机下移→碰撞检测→爆炸动画
③ 复盘
  • Sprite/Group 让大量对象管理变简单
  • 碰撞用 groupcollide 批量处理
  • 音效用 pygame.mixer
④ 练习
  • 实现玩家移动+发射子弹
  • 加入敌机与得分系统
单元 39微信跳一跳辅助工具(第26章 微信跳一跳辅助工具)4 个知识点 ▾
截图识别距离估算ADB自动跳跃
① 概念
通过截图识别棋子与落点位置,估算距离→换算按压时长→用 ADB 命令模拟长按,实现自动连续跳跃。
② 例题
# 思路:截图 → OpenCV 找棋子/落点中心
# dist = 距离; duration = dist * k
# os.system(f'adb shell input swipe 0 0 0 0 {duration}')
③ 复盘
  • 本质是'图像识别 + 动作执行'的闭环
  • 像素距离到按压时长的系数是关键参数
  • 涉及手机调试(ADB),注意设备授权
④ 练习
  • 研究如何用 OpenCV 定位棋子中心
  • 模拟一次 ADB 长按命令
单元 40汽车之家图片抓取工具(第27章 汽车之家图片抓取工具)4 个知识点 ▾
批量爬图并发下载去重存储
① 概念
综合运用爬虫:进入图库页→解析图片 URL→多线程/协程批量下载→按车型分类保存,可加去重与失败重试。
② 例题
# 思路:requests 取列表页 → 正则/XPath 提取图片 url
# 用 ThreadPoolExecutor 并发下载
# 按车型建目录保存
③ 复盘
  • 图片是二进制,用 response.content 写入
  • 并发下载务必限速、加重试
  • 遵守网站版权与使用条款
④ 练习
  • 抓取一个图集的全部图片并保存到本地
  • 加多线程提升下载速度
单元 41AI 图像识别工具(第28章 AI图像识别工具)4 个知识点 ▾
OpenCV图像预处理分类/识别模型调用
① 概念
用 OpenCV 做图像读取、灰度化、边缘检测等预处理,再调用预训练模型或简单分类逻辑实现识别(如人脸识别、物体分类)。
② 例题
import cv2
img = cv2.imread('a.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = cv2.CascadeClassifier('haarcascade_frontalface.xml').detectMultiScale(gray)
print('人脸数:', len(faces))
③ 复盘
  • OpenCV 是计算机视觉基础库
  • 预处理(灰度/缩放)显著提升识别率
  • 可接更重的深度学习模型做复杂识别
④ 练习
  • 用 OpenCV 读取图片并转灰度、画边缘
  • 跑一个现成的人脸检测 demo
单元 42e起去旅行网站(第29章 e起去旅行网站)4 个知识点 ▾
Web 全栈数据库建模前后端联调部署
① 概念
综合 Web 项目:用 Flask/Django + 数据库搭建旅游站点,含目的地展示、搜索、用户交互,练习'建模→接口→页面→上线'全链路。
② 例题
# 思路:定义 Destination 模型(名称/简介/图片)
# 列表页 / 详情页 / 搜索接口
# 模板渲染 + 静态资源 + 部署到服务器
③ 复盘
  • 先画'数据模型'再写页面,事半功倍
  • 前后端通过 URL/接口约定协作
  • 真实项目务必处理用户输入与异常
④ 练习
  • 用 Flask/Django 搭一个'景点展示'小站
  • 加搜索功能并部署到本地服务器
单元 43看店宝(京东版)(第30章 看店宝(京东版))4 个知识点 ▾
价格监控定时任务数据可视化消息提醒
① 概念
电商监控工具:定时爬取商品页面价格→与历史对比→变化时用邮件/推送提醒;可用图表展示价格走势。
② 例题
# 思路:schedule/APScheduler 定时爬价格
# 与 DB 历史比 → 变动则发提醒
# matplotlib 画价格走势
③ 复盘
  • 定时任务用 schedule/APScheduler
  • 价格变动提醒是核心价值点
  • 频繁请求注意限速与登录态
④ 练习
  • 定时抓取一个商品价格并记录
  • 价格下降时打印/发送提醒
单元 44拓展方向:数据分析 / 自动化办公(拓展(综合实战))4 个知识点 ▾
Pandas 分析Excel 自动化报表可视化
① 概念
把 Pandas/Openpyxl/Matplotlib 用到真实场景:清洗销售数据、自动生成周报 Excel、画趋势图——既是高频职场需求,也巩固全栈能力。
② 例题
# 思路:读多份 Excel → 合并清洗
# 分组聚合出 KPI → 写回带图表的报表
# 用 openpyxl 调样式
③ 复盘
  • 自动化办公='把人从重复表格里解放'
  • 分析前先明确业务问题,再选工具
  • 产出要'人能看懂',可视化很重要
④ 练习
  • 用 Pandas 分析一份销售数据并出结论
  • 用 openpyxl 自动生成带格式的周报