Python 速成 (For JS Devs)
📌 为什么要学 Python?
Section titled “📌 为什么要学 Python?”你已经会 JavaScript,Python 只是换了一套语法。核心概念完全相同。
| 你已经会的 (JS) | 对应的 Python |
|---|---|
const, let | 直接写变量名 |
[] 数组 | [] 列表 (List) |
{} 对象 | {} 字典 (Dict) |
array.map() | 列表推导式 [x for x in arr] |
async/await | async/await (几乎一样) |
npm | pip |
package.json | requirements.txt |
🔄 语法对照表
Section titled “🔄 语法对照表”// 变量声明const name = "AI";let count = 42;const isReady = true;
// 类型检查typeof name; // "string"typeof count; // "number"Array.isArray([]); // true# 变量声明(不需要 const/let)name = "AI"count = 42is_ready = True # 注意:大写 True/False
# 类型检查type(name) # <class 'str'>type(count) # <class 'int'>isinstance([], list) # True数组 vs 列表
Section titled “数组 vs 列表”const arr = [1, 2, 3, 4, 5];
// 常用操作arr.length; // 5arr.push(6); // 添加元素arr[0]; // 1arr.slice(1, 3); // [2, 3]arr.map(x => x * 2); // [2, 4, 6, 8, 10]arr.filter(x => x > 2); // [3, 4, 5]arr.reduce((a, b) => a + b, 0); // 15arr = [1, 2, 3, 4, 5]
# 常用操作len(arr) # 5arr.append(6) # 添加元素arr[0] # 1arr[1:3] # [2, 3] (切片语法)[x * 2 for x in arr] # [2, 4, 6, 8, 10] ⭐ 列表推导式[x for x in arr if x > 2] # [3, 4, 5]sum(arr) # 15对象 vs 字典
Section titled “对象 vs 字典”const user = { name: "张三", age: 25, skills: ["JS", "Python"]};
// 访问user.name; // "张三"user["age"]; // 25Object.keys(user); // ["name", "age", "skills"]
// 解构const { name, age } = user;user = { "name": "张三", "age": 25, "skills": ["JS", "Python"]}
# 访问user["name"] # "张三"(不能用 user.name)user.get("age") # 25(更安全,不存在返回 None)user.keys() # dict_keys(["name", "age", "skills"])
# 解构(Python 3.10+)name, age = user["name"], user["age"]// 普通函数function add(a, b) { return a + b;}
// 箭头函数const multiply = (a, b) => a * b;
// 默认参数function greet(name = "World") { return `Hello, ${name}!`;}
// 展开运算符function sum(...numbers) { return numbers.reduce((a, b) => a + b, 0);}# 普通函数def add(a, b): return a + b
# Lambda(类似箭头函数,但只能一行)multiply = lambda a, b: a * b
# 默认参数def greet(name="World"): return f"Hello, {name}!" # f-string = 模板字符串
# 可变参数def sum_all(*numbers): # *args return sum(numbers)🔢 NumPy 入门
Section titled “🔢 NumPy 入门”NumPy = Numerical Python,是 AI 的基础库。它提供高效的多维数组运算。
类比:如果 JS 数组是单车道,NumPy 数组就是高速公路(GPU 加速、向量化运算)。
为什么需要 NumPy?
Section titled “为什么需要 NumPy?”# 原生 Python:逐个元素相加(慢)a = [1, 2, 3]b = [4, 5, 6]result = [a[i] + b[i] for i in range(len(a))] # [5, 7, 9]
# NumPy:向量化运算(快 100x+)import numpy as npa = np.array([1, 2, 3])b = np.array([4, 5, 6])result = a + b # array([5, 7, 9]) ⚡ 一行搞定核心概念:ndarray
Section titled “核心概念:ndarray”// JS 中你可能用嵌套数组表示矩阵const matrix = [ [1, 2, 3], [4, 5, 6]];
// 访问元素matrix[0][1]; // 2
// 但 JS 没有内置的矩阵运算...// 你需要手写循环或用 math.jsimport numpy as np
# 创建数组arr = np.array([1, 2, 3]) # 1D 向量matrix = np.array([[1, 2, 3], # 2D 矩阵 [4, 5, 6]])
# 查看形状(超级重要!)matrix.shape # (2, 3) = 2行3列
# 访问元素matrix[0, 1] # 2(比 JS 的 matrix[0][1] 更简洁)
# 创建常用数组np.zeros((2, 3)) # 全 0 矩阵np.ones((2, 3)) # 全 1 矩阵np.random.randn(2, 3) # 随机数矩阵广播 (Broadcasting)
Section titled “广播 (Broadcasting)”NumPy 最强大的特性之一:不同形状的数组可以自动对齐运算。
import numpy as np
# 标量 + 数组arr = np.array([1, 2, 3])arr + 10 # array([11, 12, 13]) ← 10 自动"广播"到每个元素
# 向量 + 矩阵matrix = np.array([[1, 2, 3], [4, 5, 6]]) # shape: (2, 3)row = np.array([10, 20, 30]) # shape: (3,)
matrix + row# array([[11, 22, 33],# [14, 25, 36]])# row 自动复制成 2 行,然后逐元素相加常用操作速查
Section titled “常用操作速查”| 操作 | NumPy | JS 类比 |
|---|---|---|
| 创建数组 | np.array([1,2,3]) | [1,2,3] |
| 形状 | arr.shape | arr.length(但 NumPy 支持多维) |
| 元素乘 | a * b | a.map((x,i) => x * b[i]) |
| 矩阵乘 | a @ b 或 np.dot(a, b) | 无内置(需 math.js) |
| 求和 | arr.sum() | arr.reduce((a,b)=>a+b) |
| 平均 | arr.mean() | 手写 |
| 最大值 | arr.max() | Math.max(...arr) |
| 转置 | matrix.T | 无内置 |
| 变形 | arr.reshape(2, 3) | 无内置 |
🔥 PyTorch 一句话入门
Section titled “🔥 PyTorch 一句话入门”PyTorch = NumPy + GPU 加速 + 自动求导
交互演示: nn.Module 结构
Section titled “交互演示: nn.Module 结构”🔥 PyTorch nn.Module 可视化
2层全连接 + ReLU | 参数量: 101,770
Input
[784]→
Linear
[128]→
ReLU
→
Linear
[10]→
Output
Linear
ReLU
Sigmoid
Softmax
Dropout
💡 悬停层查看详情 | nn.Sequential 按顺序执行所有层
import torch
# 创建张量(和 NumPy 几乎一样)tensor = torch.tensor([1.0, 2.0, 3.0])
# 移到 GPUtensor = tensor.to('cuda') # 或 tensor.cuda()
# 开启自动求导(训练神经网络用)x = torch.tensor(3.0, requires_grad=True)y = x ** 2 # y = 9y.backward() # 自动计算 dy/dxprint(x.grad) # 6.0 (因为 d(x²)/dx = 2x = 2*3 = 6)PyTorch vs NumPy 速查:
| NumPy | PyTorch |
|---|---|
np.array() | torch.tensor() |
arr.shape | tensor.shape |
np.dot(a, b) | torch.matmul(a, b) 或 a @ b |
arr.sum() | tensor.sum() |
| 无 | tensor.to('cuda') (GPU) |
| 无 | tensor.backward() (自动求导) |
现在你已经掌握了 Python/NumPy 基础,可以开始学习: