Python 教程
Python 在 RootStack 体系中的定位是工具,而非核心。本教程面向已有 C/C++ 基础的读者,侧重两个方向:
- 快速解决事情 ——
python -c ""一行流、小脚本、辅助工具,不追求 Python 语法体系完整 - C ↔ Python 互操作 —— 在 C 项目中嵌入 Python 完成特定功能(CPython 内嵌、ctypes 调 C 库、pybind11/Cython 封装),将 Python 作为 C 生态的一个延伸工具
本教程假设读者已有 C 或 C++ 基础。若为纯初学者,建议先完成 C 语言教程 前 5 章再回到这里。
写在教程之前
本教程的定位
Python 不是替代 C,而是 C 程序员的工具。你不需要用 Python 重写整个项目,而是把它当作:
- 快速验证:
python -c ""替代临时写 C 编译运行,验证想法、测试小逻辑、做数据计算 - C-Python 互操作:用 ctypes 调已有的 C 库,用 CPython API 在 C 程序中嵌入 Python,用 pybind11/Cython 给 C/C++ 库披上 Python 外衣
- 脚本化辅助:代码生成(生成 C 头文件骨架)、日志分析、自动化测试、数据可视化 —— 用 Python 的快速开发能力服务 C 项目
不同系统下载 Python
Windows:
- 去 python.org 下载安装包,安装时务必勾选 “Add Python to PATH”
- 或使用 winget:
winget install python - Winget 安装后可能需要重启终端才能识别
python命令
macOS:
brew install python3- 或去 python.org 下载 .pkg 安装包
Linux:
- Debian/Ubuntu:
sudo apt install python3 python3-pip - Arch:
sudo pacman -S python python-pip - Fedora:
sudo dnf install python3 python3-pip
验证安装:
python3 --version
pip3 --version各系统可能同时存在
python/python3。建议统一使用python3和pip3,或者用uv管理 Python 版本。
编辑器选择
| 编辑器 | 平台 | 说明 |
|---|---|---|
| VSCode + Python 插件 | 全平台 | 推荐。智能补全、调试、Jupyter 支持,C/C++ 插件可共存 |
| PyCharm Community | 全平台 | 完整 IDE,适合纯 Python 项目,对新手友好 |
| Vim/Neovim + coc-pyright | 全平台 | 终端轻量方案,C 程序员习惯的编辑方式 |
Python 版本说明
推荐 Python 3.10+。Python 3.10 引入了 match/case(模式匹配),3.11/3.12 有显著性能提升。
不要用 Python 2。Python 2 已于 2020 年停止维护。如遇旧系统上的 python 命令指向 Python 2,请检查 python3 或升级系统。
当前最新稳定版为 Python 3.12/3.13,但生产环境建议使用 3.10 或 3.11(库兼容性最广)。
教程结构
graph TB ROOT["python/"] --> INTRO["1入门/ (8篇)<br/>环境、基础语法(与C逐项对比)"] ROOT --> ADV["2精通/ (8篇)<br/>解释器底层 + C互操作(本教程灵魂)"] ROOT --> PRACTICE["3实战/ (5篇)<br/>小项目:一行流、构建辅助、与C配合"] ROOT --> LIB["4库/<br/>标准库 + 第三方库 分类索引"] ROOT --> ENG["5工程化/ (8篇)<br/>venv/conda/打包/测试/CI/CD/运行项目"] ROOT --> QUANT["6量化分析/ (6篇)<br/>NumPy/Pandas/回测/性能加速"] ROOT --> SCI["7科学计算/ (5篇)<br/>NumPy/SciPy/SymPy + C加速对比"] ROOT --> VIZ["8数据可视化/ (6篇)<br/>Matplotlib/Seaborn/Plotly/Dash"] ROOT --> GFX["9图形处理/ (4篇)<br/>Pillow/OpenCV/与C库互操作"] ROOT --> WEB["10web应用/ (6篇)<br/>Flask/FastAPI/Django/数据库/部署"] ROOT --> AI["11人工智能/ (6篇)<br/>sklearn/PyTorch/ONNX部署(衔接C++)"] ROOT --> NB["12notebook/<br/>Jupyter Notebook 交互式计算"] ROOT --> SCRAPE["13爬虫/<br/>网络爬虫:requests/BeautifulSoup/Scrapy"] ROOT --> CROSS["14跨语言/<br/>R/Julia 跨语言调用 (rpy2/juliacall)"]
相关教程
| 教程 | 关系 |
|---|---|
| Bash 脚本教程 | 同为脚本语言教程,Bash偏系统/管道,Python偏通用/数据 |
| C语言教程 | 本教程前置,C↔Python互操作的核心 |
| C++教程 | pybind11 需要 C++11 |
| Rust教程 | Rust做性能关键模块,Python做胶水,PyO3 对应 pybind11 |
推荐学习路径
阶段一:快速上手(1-2 天)
| 顺序 | 文件 | 重点 | 技巧 |
|---|---|---|---|
| 0 | 00 准备工作 | 各系统安装配置、编辑器选择 | 终端 REPL 即可跑 Python |
| 1 | 01 认识 Python | 安装、REPL、python -c | 用 python -c 替代临时 C 编译 |
| 2 | 02 变量与类型 | 与 C 的类型逐项对比 | 关注动态类型与 C 强类型的差异 |
| 3 | 03 列表与字典 | list/tuple/dict/set | 切片、推导式是 C 没有的武器 |
至此已能用
python -c处理多数文本/数据处理任务。后面的 04-07 按需阅读。
阶段二:工具化思维(1 周)
| 顺序 | 文件 | 重点 |
|---|---|---|
| 4 | 04 字符串与文件 | str 方法、open/with、编码 |
| 5 | 05 异常与调试 | try/except/traceback/pdb |
| 6 | 06 类与继承 | C struct → C++ class → Python class |
| 7 | 07 模块与包 | import 机制、pip、venv 初识 |
| 8 | 实战 01 一行流 | python -c 合集 |
| 9 | 实战 02 日志分析 | 实战脚本 |
| 10 | 实战 03 代码生成 | Python 为 C 项目服务 |
阶段三:精通 —— C 互操作(1-2 周,本教程灵魂)
| 顺序 | 文件 | 重点 |
|---|---|---|
| 11 | 精通 01 对象模型 | PyObject、引用计数、与 C 内存模型对比 |
| 12 | 精通 02 GIL | GIL 原理、multiprocessing |
| 13 | 精通 03 字节码 | dis 模块、与 C 编译四步骤对比 |
| 14 | 精通 04 生成器协程 | yield/yield from/async await 底层 |
| 15 | 精通 05 ctypes | 加载 .so、结构体映射、回调 |
| 16 | 精通 06 内嵌 CPython | 在 C 程序初始化解释器→调 Python |
| 17 | Cython | 三种方案对比选型 |
| 18 | 精通 08 进程管道 | 双向通信、JSON/二进制交换 |
阶段四:专题工具 —— 按需查阅
| 领域 | 入口目录 | 核心库 |
|---|---|---|
| 工程化 | 5工程化 | venv/uv/conda/pytest/ruff/pyproject.toml |
| 从零运行项目 | 运行现有项目 | 克隆/虚拟环境/pip install/运行 |
| Conda 环境管理 | Conda | conda create python=3.10/PyTorch |
| 量化分析 | 6量化分析 | NumPy/Pandas/backtrader/akshare |
| 科学计算 | 7科学计算 | NumPy/SciPy/SymPy |
| 数据可视化 | 8数据可视化 | Matplotlib/Seaborn/Plotly/Dash |
| 图形处理 | 9图形处理 | Pillow/OpenCV |
| Web 应用 | 10web应用 | Flask/FastAPI/Django |
| 人工智能 | 11人工智能 | sklearn/PyTorch/ONNX |
| Jupyter Notebook | 12notebook | JupyterLab |
| 网络爬虫 | 13爬虫 | requests/BeautifulSoup/Scrapy/Playwright |
| R/Julia 跨语言 | 14跨语言 | rpy2/juliacall |
C ↔ Python 对比学习
语法对比
| 概念 | C | Python |
|---|---|---|
| 变量 | int x = 5; 静态类型 | x = 5 动态类型,名称绑定 |
| 数组 | int arr[10]; 连续内存 | arr = [0] * 10 引用列表 |
| 字符串 | char s[] = "hello"; 以 \0 结尾 | s = "hello" 不可变 str 对象 |
| 结构体 | struct Point { int x; int y; }; | class Point: x, y 或 namedtuple |
| 函数指针 | int (*fp)(int, int); | lambda x, y: x + y 一等函数 |
| 条件 | if (x > 0) { ... } | if x > 0: 缩进块 |
| 循环 | for (int i = 0; i < n; i++) | for i in range(n): |
| 内存 | malloc/free 手动管理 | GC 自动回收,del 仅删引用 |
互操作方案速选
| 场景 | 推荐方案 | 说明 |
|---|---|---|
| Python 调已有的 C .so/.dll | ctypes | 零额外依赖,标准库自带 |
| Python 调 C .so(需复杂类型) | CFFI | 比 ctypes 更灵活,支持 ABI/API 模式 |
| 为 C/C++ 库写 Python 绑定(性能优先) | pybind11 | C++11 模板,PyTorch 官方采用 |
| 为 C 库写 Python 绑定(简单场景) | Cython | 写 .pyx 文件编译为 .so |
| C 程序需要执行 Python 代码 | CPython C API 内嵌 | Py_Initialize() / PyRun_SimpleString() |
| C 程序与 Python 脚本交换数据 | subprocess + JSON | 最简单,无需编译依赖 |
与其他模块的关联
- C 教程 — 系统编程基础、内存模型、互操作对照
- C++ 教程 — pybind11 需要 C++11、SWIG 支持 C/C++
- Rust 教程 — PyO3(Rust 侧 Python 绑定)对应 pybind11
- 内核教程 — CPython 作为一种”语言运行时内核”
- DSA 学习路线 — Python 刷题 vs C 刷题的效率差异
- 红队知识库 — Python 在安全自动化中的应用