Python-前端对照版
Python 基础知识点梳理(前端对照版)
用前端概念快速建立 Python 认知
再复习复习python,之前写的也不是很多,如今AI发展的太快了,我只能说一句巅峰人类认知了 太夸张了!
一、语言定位对比
| 维度 | JavaScript / TS | Python |
|---|---|---|
| 类型系统 | TS 静态,JS 动态弱类型 | 动态强类型(1 + "a" 直接报错) |
| 代码块 | 花括号 {} |
缩进(4 空格,缩进即语法) |
| 语句结尾 | 分号(可省) | 换行即结束,无分号 |
| 主战场 | 浏览器 / Node 全栈 | 数据分析、AI、脚本、后端 |
| 生态入口 | npm + package.json | pip + requirements.txt |
一句话:Python ≈ 没有花括号、强制缩进的"弱类型版 TS"写法 + 强类型运行时的语言,语法极简,心智负担比 JS 低。
二、基础语法对照
1. 变量与常量
# JS: let x = 5; const PI = 3.14
x = 5 # 无声明关键字,赋值即定义
PI = 3.14 # 没有 const,约定大写表示常量(可改,靠自觉)
2. 字符串
name = "an"
f"Hi {name}" # ≈ JS 模板字符串 `Hi ${name}`
"Hi {}".format(name) # 旧式写法,认识即可
name.upper() # 方法和 JS 基本同名
3. 条件与逻辑
# JS: if (x > 0) { ... } else if ... else ... && || !
if x > 0: # 无括号,冒号开头
print("正数")
elif x == 0: # else if → elif
print("零")
else:
print("负数")
# 逻辑运算写成英文单词
a and b # &&
a or b # ||
not a # !
# 三元:a if 条件 else b (注意顺序和 JS 的 ? : 相反)
msg = "成年" if age >= 18 else "未成年"
4. 循环
# JS: for (const item of arr) / arr.forEach / for i
for item in arr: # ≈ for...of
for i, item in enumerate(arr): # 带下标 ≈ arr.entries()
for i in range(5): # 0..4 ≈ for (let i=0; i<5; i++)
5. 函数
def add(a, b):
return a + b
def greet(name="朋友"): # 默认参数,同 JS
return f"你好 {name}"
def total(*args, **kwargs): # *args ≈ ...rest;**kwargs 收关键字参数为 dict
pass
# lambda ≈ 箭头函数,但只能写一行表达式
square = lambda x: x * x # ≈ x => x*x
三、核心数据结构对照
| Python | JS 对应 | 关键差异 |
|---|---|---|
list 列表 |
Array |
append()≈push;切片 a[1:3]≈slice;负索引 a[-1] 取最后 |
tuple 元组 |
readonly 数组 | 不可变;函数多返回值的载体;a, b = (1, 2) 解包 ≈ 解构 |
dict 字典 |
Object / Map |
d.get("k", 默认值) 防 KeyError;d.items() 遍历键值 |
set 集合 |
Set |
支持数学运算:s1 & s2 交集、`s1 |
None |
null |
用 x is None 判断(不用 ==) |
切片:Python 独有的高频武器
nums = [0, 1, 2, 3, 4]
nums[1:3] # [1, 2] ≈ slice(1, 3)
nums[:2] # [0, 1] 从头
nums[-2:] # [3, 4] 取末尾两个
nums[::-1] # [4,3,2,1,0] 反转,≈ reverse() 的非破坏版
列表推导式:一行顶 filter + map
# JS: nums.filter(x => x > 1).map(x => x * 2)
[x * 2 for x in nums if x > 1]
# dict / set 也有推导式
{k: v * 2 for k, v in prices.items()}
{x % 3 for x in nums}
四、进阶语法对照
1. 类型标注(看起来像 TS,本质不同)
def add(a: int, b: int) -> int: # 写法和 TS 几乎一致
return a + b
重要:Python 的类型标注运行时不生效,只是提示;用 mypy 做静态检查(≈ tsc),用 Pydantic 做运行时校验(≈ zod)。
2. 类
class User:
def __init__(self, name): # constructor
self.name = name # self ≈ this,但必须显式写出
def hello(self): # 方法第一个参数永远是 self
return f"我是 {self.name}"
u = User("an") # 实例化不用 new
3. 模块系统
# JS: import { sum } from './utils'
from utils import sum
import pandas as pd # as 起别名,AI 代码标配:np / pd / plt
# 没有 export 关键字:模块里定义的公开名字天然可被导入
4. 异常处理
# JS: try { } catch (e) { } finally { }
try:
result = 10 / x
except ZeroDivisionError as e: # 可按类型捕获
print(f"出错: {e}")
finally:
pass
5. 异步
import asyncio
async def get(url): # async function
return await client.get(url) # await 同 JS
results = await asyncio.gather(*tasks) # ≈ Promise.all
6. 装饰器(Python 特色)
@app.get("/users") # FastAPI 用它注册路由 ≈ 高阶函数语法糖
def list_users(): ...
@lru_cache # 一行给函数加缓存
def fib(n): ...
五、容易踩的坑(前端视角重点预警)
- 缩进就是语法:混用 Tab 和空格直接报错,编辑器配置 4 空格
isvs==:is判断是不是同一对象(≈ JS 的===更严格版);判 None 用is None,判值相等用==- 可变默认参数陷阱:
def f(items=[])的列表会被所有调用共享,正确写法是items=None再在函数内初始化 - 没有
undefined:访问不存在的 dict 键直接抛KeyError,用d.get(key)更安全 - 复制列表要切片:
b = a是同一引用(≈ JS 引用赋值);b = a[:]或a.copy()才是真拷贝 - 字符串不可变:和 JS 一样,但拼接大量字符串用
"".join(list)而不是+=
六、项目整体架构(分层视角)
┌─────────────────────────────────────────────┐
│ 服务层 Serving FastAPI/Flask · 推理接口 │ ← 对外提供 HTTP API
├─────────────────────────────────────────────┤
│ 模型层 Modeling sklearn/PyTorch · 训练评估 │ ← 核心算法逻辑
├─────────────────────────────────────────────┤
│ 特征层 Features 特征工程 · 编码变换 │ ← 数据 → 模型输入的桥梁
├─────────────────────────────────────────────┤
│ 数据层 Data 采集 · 清洗 · 存储 │ ← 一切的基础
├─────────────────────────────────────────────┤
│ 基础设施 Infra venv · 依赖 · CI/CD · 服务器│
└─────────────────────────────────────────────┘
右侧贯穿全程:MLflow 实验跟踪 · Git/DVC 版本 · Docker · 监控
前端类比:服务层 ≈ Express/Koa 路由层;模型层 ≈ 业务逻辑层(service);特征+数据层 ≈ 数据访问层(dao);整体也是一个分层架构,只是把"CRUD"换成了"数据→模型"。
七、项目目录结构
ai-project/
├── src/ # 核心代码(≈ 前端 src/)
│ ├── data/ # 数据加载、清洗
│ ├── features/ # 特征工程
│ ├── models/ # 模型定义、训练、评估
│ └── api/ # FastAPI 接口层(≈ Express 路由)
├── notebooks/ # Jupyter 实验,只做探索不进生产
├── data/
│ ├── raw/ # 原始数据(只读,不改)
│ └── processed/ # 清洗后的数据
├── configs/ # YAML 配置:超参、路径(≈ .env)
├── tests/ # pytest 单元测试
├── docs/ # 文档、模型卡片
├── requirements.txt # 依赖清单(≈ package.json)
├── pyproject.toml # 现代依赖 + 构建配置
└── README.md # 项目说明书
关键原则:
notebooks/是草稿纸,实验结论要沉淀为src/里的可复用代码data/raw/只读;所有处理结果写data/processed/,保证可追溯- 配置与代码分离:路径、超参全放
configs/,不硬编码
八、开发八步流程
| 步骤 | 做什么 | 关键点 / 前端类比 |
|---|---|---|
| 1 明确问题 | 定业务目标和衡量指标 | 指标 = 验收标准;分类看准确率/召回率,回归看 MSE/MAE |
| 2 搭环境 | venv + 依赖管理 |
venv ≈ 项目级 node_modules 隔离;requirements.txt ≈ package.json |
| 3 数据获取清洗 | pandas 处理缺失/重复/异常 | 数据质量决定上限:Garbage in, garbage out |
| 4 探索分析 EDA | notebook 看分布、相关性 | ≈ 开发前技术调研,先看懂数据再动手 |
| 5 特征工程 | 编码、归一化、构造特征、切分数据集 | 常比换模型更影响效果;训练/测试集切分要早做 |
| 6 训练调优 | 基线模型 → 复杂模型 → 调超参 | 先跑通简单基线(逻辑回归),再上 XGBoost/神经网络 |
| 7 评估保存 | 测试集评估 + 保存模型 | pickle/joblib/ONNX 保存;固定 random_seed 保证可复现 |
| 8 部署监控 | FastAPI 服务化 + Docker | ≈ Express 出 API + 打镜像;上线后监控数据漂移 |
九、核心知识点清单
1. 环境与依赖
python -m venv .venv→source .venv/bin/activate(Windows:.venv\Scripts\activate)pip freeze > requirements.txt导出依赖;pip install -r requirements.txt安装- conda 更适合数据科学(能管非 Python 依赖如 CUDA);uv 是新一代更快的选择
2. 数据处理三件套
- numpy:多维数组运算,底层 C 实现,AI 世界的"地基"
- pandas:DataFrame 表格操作(≈ 带 SQL 能力的 Excel/JS 数组)
- matplotlib / seaborn:可视化,EDA 阶段的主要工具
3. 建模框架
- scikit-learn:传统 ML 首选,API 统一:
fit()→predict()→score() - PyTorch / TensorFlow:深度学习,适合图像、NLP、大模型场景
- XGBoost / LightGBM:表格数据竞赛与工业界的主力
4. Web 框架(服务化)
- FastAPI(推荐):自带类型校验(Pydantic ≈ zod)、自动生成 Swagger 文档
- Flask:轻量老牌,≈ Express 的定位
- 类比:FastAPI 路由 ≈ Express router;Pydantic 模型 ≈ zod schema + TS interface
5. 实验与版本管理
- Git 管代码;DVC 管数据和模型文件(大文件不进 Git)
- MLflow:记录每次实验的参数、指标、模型版本,≈ "实验的 Git"
6. 部署
- Docker:python 基础镜像 + requirements + 代码 → 一处构建到处运行
- 常见形态:HTTP API 服务(FastAPI + Uvicorn)、批量离线预测、模型文件嵌入应用
十、项目里必备的文档知识点
| 文档 | 作用 | 前端类比 |
|---|---|---|
README.md |
项目是什么、怎么装、怎么跑 | 同名文件,AI 项目更强调复现步骤(数据从哪来、怎么训练) |
requirements.txt / pyproject.toml |
依赖锁定 | package.json + package-lock.json |
configs/*.yaml |
超参、路径配置,改配置不改代码 | .env + 配置文件 |
| API 文档 | 接口契约 | Swagger/OpenAPI(FastAPI 自动生成) |
| 模型卡片 Model Card | AI 特色:记录模型用途、训练数据、指标、局限与偏见 | ≈ 组件文档 + 技术方案合体 |
| 实验记录 | 每次实验的参数/指标对比 | ≈ 技术调研记录,用 MLflow 自动化 |
| 数据字典 | 每个字段的含义、类型、取值范围 | ≈ TS interface 的注释文档 |

浙公网安备 33010602011771号