从零开始的 Python 学习之旅 · 入门到中高级
安装 Python 3.12,配置 VS Code,写了第一行 print("Hello World")。理解了解释型语言和交互式 REPL 的概念。
整数、浮点数、字符串、布尔值。学了类型转换 int()、str(),还有 f-string 格式化 f"x = {x}"。
split()、join()、strip()、切片 s[1:4]。练了一道反转字符串和判断回文的题。
三种基础数据结构的增删改查。列表推导式 [x*2 for x in range(10)] 写起来真爽。字典在查找场景下比列表快很多。
# 列表推导式
squares = [x**2 for x in range(1, 11)]
# 字典计数
word_count = {}
for w in words:
word_count[w] = word_count.get(w, 0) + 1
if/elif/else、for、while、break、continue。写了猜数字小游戏。
def、参数类型(位置/关键字/默认/可变)、return、全局变量与局部变量、lambda 表达式。
def calc(a, b, op="+"):
if op == "+": return a + b
elif op == "-": return a - b
# lambda
add = lambda x, y: x + y
open()、with 上下文管理器、read()/write()、逐行读取。写了一个简单的记事本程序。
try/except/finally、捕获特定异常类型、raise 抛出自定义异常。理解了 EAFP(Easier to Ask Forgiveness than Permission)风格。
import、from ... import、__name__ == "__main__"。自己写了一个 utils.py 工具模块,尝试了 pip 安装第三方包。
set 的交并差集运算、collections 模块的 Counter、defaultdict、namedtuple。
嵌套推导式、条件过滤、性能比较(推导式比 for 循环快约 2x)。练了一道矩阵转置的题。
__iter__ 和 __next__、yield 关键字、生成器表达式。生成器在处理大数据流时内存占用极低。
def fib():
a, b = 0, 1
while True:
yield a
a, b = b, a + b
gen = fib()
for _ in range(10):
print(next(gen))
高阶函数、闭包、@decorator 语法糖。写了一个计时装饰器 @timer,理解了装饰器在日志、鉴权中的用途。
可变参数、关键字参数解包、装饰器中传递参数的写法。
PEP 8 规范、black 自动格式化、flake8 静态检查、isort 排序 import。规范写好代码能省很多心。
class、__init__、实例方法/类方法/静态方法、self 的本质。理解了 Python 一切皆对象的哲学。
单继承、super()、方法重写、鸭子类型。写了一个简单的动物类层次结构。
__str__、__repr__、__eq__、__lt__、__getitem__、上下文管理器 __enter__/__exit__。让自定义类的行为像内置类型一样自然。
@property 实现 getter/setter、私有变量命名约定 _name / __name、abc 模块。
日期格式化 strftime、时区处理 pytz、时间戳转换、计时器实现。
re.match、re.search、re.findall、re.sub、分组捕获。解析日志文件很实用。
import re
pattern = r"(\d{4})-(\d{2})-(\d{2})"
text = "今天日期是 2025-03-11"
match = re.search(pattern, text)
if match:
year, month, day = match.groups()
文件和目录操作、路径处理、环境变量、命令行参数。写了一个批量重命名文件的脚本。
json.dumps/loads、csv.reader/writer、DictReader。处理了一个真实的 API 返回数据。
basicConfig、不同日志级别、Handler(FileHandler、StreamHandler)、Formatter、配置文件加载。告别 print 调试。
写了一个带参数的命令行工具:python script.py --input file.txt --output result.json。
unittest 模块、assertEqual、setUp/tearDown、pytest 的基本用法。写测试让人对代码更有信心。
GET/POST 请求、状态码、请求头/响应头。用 requests 调了几个公开 API,处理 JSON 响应。
安装 Flask、@app.route()、动态路由、request.args 获取参数。写了第一个 Web 页面 "Hello World"。
from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def home():
return "<h1>Hello, Python!</h1>"
@app.route('/api/hello')
def hello_api():
name = request.args.get('name', 'World')
return {"message": f"Hello {name}"}
Jinja2 模板引擎、模板继承、表单处理(GET/POST)、flash 消息。做了一个简单的留言板。
flask-restful、资源类、请求解析。写了一个简单的 Todo API(CRUD)。理解了 REST 设计原则。
无状态协议的问题、Flask session 实现、签名 cookie 的安全性。
用 Blueprint 拆分模块,搭建了标准的 Flask 项目目录结构。大项目不能全写在一个文件里。
TCP 客户端/服务器模型、socket 模块、bind/listen/accept。写了一个简单的回声服务器。
urllib.request、urlparse、处理 URL 编码。理解了 requests 底层是怎么工作的。
venv、pip freeze > requirements.txt、pipenv。项目之间依赖隔离很重要。
Python 内置的 sqlite3 模块、CREATE TABLE、INSERT、SELECT、参数化查询防 SQL 注入。
INNER JOIN、LEFT JOIN、GROUP BY、HAVING、子查询。建了一个用户-订单的关联查询练习。
SELECT u.name, COUNT(o.id) as order_count
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
GROUP BY u.id
HAVING order_count > 5;
安装 MySQL、pymysql 连接、连接池概念。对比了 SQLite 和 MySQL 的适用场景差异。
declarative_base、模型定义、session、CRUD 操作。ORM 让代码更像面向对象。
relationship、ForeignKey、一对多/多对多、懒加载与立即加载。
alembic init、迁移脚本生成、upgrade/downgrade。上线后改表结构的必备工具。
安装 Redis、redis-py、字符串/哈希/列表/集合操作。对比了 Redis 和 MySQL 在数据结构层面的不同。
用 Redis 做 Flask 的 session 存储,缓存数据库查询结果(设置 TTL),pipeline 批量操作。
EXPLAIN 分析查询计划、索引原理(B+ Tree)、最左前缀原则、LIKE 通配符对索引的影响。
操作系统层面的进程/线程区别、Python 的 GIL(全局解释器锁)。理解了 GIL 对 CPU 密集和 I/O 密集任务的不同影响。
Thread、start()、join()、守护线程。写了一个并发下载图片的脚本。
import threading
import requests
def download(url, filename):
resp = requests.get(url)
with open(filename, 'wb') as f:
f.write(resp.content)
threads = []
for i, url in enumerate(urls):
t = threading.Thread(target=download, args=(url, f"img_{i}.jpg"))
threads.append(t)
t.start()
for t in threads:
t.join()
print("所有下载完成")
竞态条件、threading.Lock、acquire/release、with lock 上下文语法、可重入锁 RLock。
queue.Queue(生产者-消费者模式)、threading.Event、Semaphore 控制并发数。
concurrent.futures.ThreadPoolExecutor、submit()、map()、as_completed()。比手动管理线程优雅得多。
Process、Pool、进程间通信 Queue / Pipe。多进程可以绕过 GIL,适合 CPU 密集计算。
写了一个基准测试:CPU 密集型用多进程快 4x,I/O 密集型用多线程也很快。理解了选型的关键在于任务类型。
用生成器模拟协程、yield 发送值 gen.send(value)。为之后学 asyncio 打基础。
async/await 语法、asyncio.run()、协程对象 vs 任务、asyncio.sleep()。
create_task()、asyncio.gather()、wait()、超时控制 asyncio.wait_for()。
async def fetch_data(url):
async with aiohttp.ClientSession() as session:
async with session.get(url) as resp:
return await resp.json()
async def main():
urls = ["https://api.example.com/1", "https://api.example.com/2"]
results = await asyncio.gather(*[fetch_data(u) for u in urls])
print(results)
asyncio.run(main())
安装 aiohttp、异步请求、并发控制(Semaphore)。并发拉取 100 个 API 比 requests 快了十几倍。
django-admin startproject、项目结构、MTV 模式、manage.py。感受到了 Django"自带电池"的理念。
models.py 定义模型、makemigrations/migrate、Django Admin 后台自动生成。
函数视图、类视图、TemplateView、ListView、Django 模板语言。
安装 MongoDB、pymongo、文档 CRUD、find() 条件查询、聚合管道。对比了文档型数据库和关系型数据库的设计差异。
两种主流 ORM 的语法差异、懒加载策略、N+1 查询问题及优化。SQLAlchemy 更灵活,Django ORM 更便捷。
git init、add/commit/push/pull、分支管理、merge/rebase、.gitignore。开始用 Git 管理所有项目代码。
大 O 表示法、O(1)/O(n)/O(n²)/O(log n)。刷了几道 LeetCode 简单题分析复杂度。
冒泡、选择、插入、快速排序、归并排序。手写快排和归并,理解了分治思想。
手写链表类、反转链表、二叉树遍历(前/中/后序、层序)。递归在树结构中很自然。
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def inorder(root):
if not root:
return []
return inorder(root.left) + [root.val] + inorder(root.right)
Python list 作为栈、collections.deque 作为队列、heapq 实现最小堆。用堆解决了 Top K 问题。
两数之和、链表判环、无重复字符的最长子串。哈希表是空间换时间的经典。
斐波那契、爬楼梯、背包问题。理解状态转移方程和备忘录优化。
邻接表表示图、深度优先搜索、广度优先搜索。用 BFS 解了最短路径(迷宫)问题。
一周刷了 15 道题,涵盖数组、字符串、链表、树。总结了常见题型的解题模板。
标准二分查找、边界条件处理、快慢指针(环形链表)、左右指针(两数之和 II)。
ACID 特性、读未提交/读已提交/可重复读/串行化、脏读/不可重复读/幻读。MySQL InnoDB 默认 RR。
InnoDB 聚簇索引结构、二级索引、回表查询、覆盖索引优化。通过 EXPLAIN 验证了 using index。
-- 覆盖索引:查询的所有字段都在索引中
EXPLAIN SELECT id, name FROM users WHERE name = 'Alice';
-- type: ref, Extra: Using index
行锁、表锁、间隙锁(Gap Lock)、Next-Key Lock、死锁检测。理解了高并发下的锁竞争问题。
安装 PostgreSQL、psycopg2 连接、JSONB 数据类型、数组类型。对比了 MySQL 和 PostgreSQL 的特性差异。
倒排索引原理、elasticsearch-py、全文搜索、分词器。做了一个简单的博客搜索功能。
第一二三范式、反范式化的场景、ER 图设计。设计了一个电商系统的数据库表结构。
mysqldump、二进制日志(binlog)、时间点恢复。理解了为什么定期备份很重要。
开启慢查询日志、pt-query-digest 分析、改写 SQL、加索引、分页优化。把一个 5 秒的查询优化到了 50ms。
CAP 定理、BASE 理论、一致性模型(强/弱/最终一致性)、分布式系统面临的挑战(网络分区、时钟同步)。
RESTful API 设计规范、RPC 框架概念(gRPC)、Protocol Buffers 序列化。对比了 REST 的灵活性和 RPC 的高效性。
安装 RabbitMQ、pika 库、生产者/消费者模式、Exchange 类型(direct/fanout/topic)。
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='task_queue', durable=True)
channel.basic_publish(
exchange='',
routing_key='task_queue',
body='Hello World',
properties=pika.BasicProperties(delivery_mode=2))
print("消息已发送")
connection.close()
Redis 的发布/订阅模式、消息持久化、消费确认。对比了两者在消息可靠性方面的差异。
Celery 架构、broker(Redis/RabbitMQ)、worker、beat 定时任务。异步发送邮件、定时爬虫。
不同队列路由不同任务、任务结果后端(result backend)、任务链(chain)/组(group)/回调(callback)。
Kafka 架构(Producer/Broker/Consumer/Topic/Partition)、kafka-python、消息有序性、消费者组。
Kafka 适合高吞吐日志/事件流(百万级/秒),RabbitMQ 适合可靠的消息投递和复杂路由。选对工具很重要。
基于 Redis 的分布式锁(SETNX + 过期时间)、Redlock 算法、基于数据库的乐观锁。理解了什么场景需要分布式锁。
安装 Docker、docker run/pull/ps/exec、镜像与容器的概念、Dockerfile 编写。
docker-compose.yml、定义 Web + MySQL + Redis 服务、网络配置、数据卷持久化。
services:
web:
build: .
ports:
- "5000:5000"
depends_on:
- db
- redis
db:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: secret
Nginx 配置反向代理、upstream 负载均衡(轮询/IP Hash/最少连接)、静态文件服务。
编写 .github/workflows、自动化测试、自动部署到服务器。理解了持续集成/持续部署的流程。
SSH 连接、文件权限、systemd 服务管理、supervisor 进程管理。终于把 Flask 项目部署到了服务器上。
certbot 申请免费 SSL 证书、自动续期、Nginx SSL 配置。给个人网站配上了 HTTPS。
Prometheus 指标收集、Grafana 可视化面板、ELK(Elasticsearch + Logstash + Kibana)日志方案。
ab(Apache Bench)、locust 压测工具、分析瓶颈(CPU/Memory/I/O)。
setuptools、pyproject.toml、发布到 PyPI。包的结构和依赖管理。
type 作为元类、自定义元类、__new__ vs __init__、单例模式的元类实现。
__get__、__set__、__delete__ 协议。理解了 @property 和 @staticmethod 背后的实现原理。
contextlib 模块、@contextmanager 装饰器、contextlib.ExitStack 管理多个上下文。
Protocol Buffers 定义服务、grpcio 生成代码、Unary/Server Streaming/Bidirectional Streaming。
syntax = "proto3";
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
Leader 选举、日志复制、安全性。理解了 etcd/Consul 等一致性存储的底层原理。
垂直分库、水平分表(Sharding)、分片键选择、读写分离架构。ShardingSphere / vitess 中间件。
微服务拆分原则、服务发现(Consul)、API 网关、熔断/降级(Hystrix 模式)、分布式链路追踪(Jaeger)。
unittest.mock、pytest.fixture、pytest.mark.parametrize、覆盖率 pytest-cov。
从 1 月起航到年底,经历了 12 个月的学习。从 print("Hello World") 到分布式架构,总共写了 200+ 小时的代码,完成 3 个完整项目。Python 不仅是语言,更是一种思维方式。明年继续!
从 0 搭建完整博客:用户认证、文章 CRUD、Markdown 渲染、评论系统。使用了 Flask + SQLAlchemy + Bootstrap。
集成 Elasticsearch 全文搜索、Nginx + Gunicorn 部署、HTTPS 配置。项目正式上线。
cProfile 性能分析、line_profiler 逐行分析、memory_profiler 内存分析。找到了项目中的性能瓶颈。
Cython 编译 Python 代码、类型声明加速、numba JIT 编译。CPU 密集计算提速了 50x。
Scrapy + Redis 分布式爬虫、去重(Bloom Filter)、Celery 任务调度、数据落库。
代理池维护(Redis Set)、User-Agent 轮换、请求频率控制、渲染动态页面的方案(Selenium/Playwright)。
ROW_NUMBER()、RANK()、LAG/LEAD、SUM() OVER()。窗口函数在报表查询中非常强大。
SELECT
name,
department,
salary,
RANK() OVER (PARTITION BY department ORDER BY salary DESC) as rank
FROM employees;
尝试测试驱动开发:先写测试再写代码。写了完整的 API 测试套件,覆盖率 90%+。
基于 Flask 实现简单的 API 网关:路由转发、限流(令牌桶)、鉴权(JWT)、请求日志。
用 gRPC 实现用户服务和订单服务的通信,双向流实现实时推送。Protobuf 的编码效率优势很明显。
Pod/Deployment/Service/Ingress 概念、kubectl 常用命令、minikube 本地集群。
将 Flask 应用容器化并部署到 K8s:编写 Deployment YAML、Service 暴露、ConfigMap 配置管理、滚动更新。
HyperLogLog(UV 统计)、Bitmap(签到)、Sorted Set(排行榜)、Stream(消息队列)。
Cache Aside、Read/Write Through、缓存穿透/击穿/雪崩的解决方案。用 Redis 分布式锁防止缓存击穿。
事件循环机制、回调地狱与协程、asyncio.Future 底层实现、自定义 awaitable 对象。
两阶段提交(2PC)、TCC、Saga 模式、最终一致性方案。没有完美的分布式事务方案。
安装 FastAPI、自动生成 OpenAPI 文档、Pydantic 数据校验、依赖注入。async 原生支持很香。
FastAPI + WebSocket + Redis Pub/Sub。支持多房间实时聊天,理解 WebSocket 的握手和帧协议。
从单体 Flask 到微服务 + K8s + 消息队列的演变过程。回顾整个学习历程,Python 生态在云原生领域的工具链已经非常成熟。