代码速查表
出处里的文件都在 编程/教材/。
输入关键词开始查 —— 多个词用空格隔开(都要命中)。
1 数据进
| 我想做什么 | 搜索关键词 | 代码写法 | 一句话解释 | 出处 | 坑 |
|---|---|---|---|---|---|
| 读一个文本文件 | 读文件 打开文件 | with open("a.txt", encoding="utf-8") as f:text = f.read() |
一次读成字符串 | Python核心 §6 | 必须用 with,否则文件不关闭 |
| 一行一行读(大文件) | 逐行读 大文件 | with open("a.txt", encoding="utf-8") as f:for line in f:print(line.rstrip()) |
一次只读一行,不吃内存 | 阶段10 | 行尾自带 \n,用 rstrip() 去掉 |
| 读成行的列表 | readlines | lines = f.readlines() |
全部读进列表 | 阶段10 | 大文件会爆内存 |
| 读 CSV 成表格 | 读csv 读表格 | df = pd.read_csv("trials.csv") |
一行搞定,自动识别表头 | 科研计算 §3 | 中文路径/编码问题用 encoding="utf-8" |
| 读 Parquet(快) | parquet 大数据 | df = pd.read_parquet("a.parquet") |
大数据专用格式 | 科研计算 §5 | 需要先装 pyarrow |
| 把一行 CSV 切成字段 | split 切分 逗号 | parts = [p.strip() for p in line.split(",")] |
按逗号切成列表 | 阶段9 | 先 strip() 去空格," 18 " 不是 "18" |
| 把字符串转成数字 | 转数字 类型转换 | float(s.strip()) / int(s) |
字符串→数 | 阶段9 | 有空格会报 ValueError,先 strip |
| 跳过空行和注释行 | 跳过空行 | if not line or line.startswith("#"):continue |
脏数据常见处理 | 阶段10 | — |
| 读文件时定位路径 | 路径 文件在哪 | from pathlib import PathHERE = Path(__file__).resolve().parentp = HERE / "data" / "raw.csv" |
基于脚本自身位置找文件 | 阶段10 | ⚠️ 别写死 /Users/... |
2 看数据
| 我想做什么 | 搜索关键词 | 代码写法 | 一句话解释 | 出处 | 坑 |
|---|---|---|---|---|---|
| 看前几行 | 预览 head | df.head() |
看数据长什么样 | 科学计算栈 §3 | 拿到数据第一件事就是它 |
| 看形状(几行几列) | 形状 shape | df.shape / arr.shape |
返回 (行, 列) |
科学计算栈 §2 | numpy 调试第一件事 |
| 看每列的类型 | 类型 dtype | df.dtypes / arr.dtype |
检查有没有被读成字符串 | 科学计算栈 §3 | 数字列被读成 object 是常见坑 |
| 看列的统计摘要 | 描述 describe | df.describe() |
一次给出 count/mean/std/min/max | 科学计算栈 §3 | — |
| 数有多少行 | 行数 多少条 | len(df) / len(records) |
数据量 | 阶段9 | — |
| 看字符串的"真面目" | repr 空格 换行 | print(repr(s)) |
显示出空格、换行符 | 阶段9 | 直接 print 看不出空格 |
| 看数组的维度数 | 维度 ndim | arr.ndim |
1=向量 2=矩阵 | 科学计算栈 §2 | — |
| 看总元素个数 | size | arr.size |
所有元素总数 | 科学计算栈 §2 | 和 shape 不是一回事 |
3 选数据
| 我想做什么 | 搜索关键词 | 代码写法 | 一句话解释 | 出处 | 坑 |
|---|---|---|---|---|---|
| 按列名取一列 | 取列 选列 | df["反应时"] |
用名字取,不用记位置 | 科学计算栈 §3 | 列名不存在会 KeyError |
| 按条件筛选行 | 筛选 过滤 条件 | df[df["正确"] == 1] |
只留满足条件的行 | 科研计算 §3 | — |
| 多条件筛选 | 多条件 and | df[(df["rt"] > 200) & (df["rt"] < 2000)] |
两个条件都要满足 | 科研计算 §3 | ⚠️ 用 & 不用 and,每个条件必须加括号 |
| 数组条件筛选 | 布尔索引 | a[a > 3] |
只留大于 3 的元素 | 科学计算栈 §2 | 条件要用括号包住 |
| 条件替换值 | where 满足则 | np.where(a > 3, a, 0) |
满足保留,否则置 0 | 科学计算栈 §2 | 三个参数:条件、真值、假值 |
| 剔除异常反应时 | 剔除 异常值 清洗 | clean = rts[(rts >= 0.2) & (rts <= 3.0)] |
只保留合理范围 | 阶段10 | 阈值要在分析前定好并写进论文 |
| 剔除答错的试次 | 剔除错误 只留对的 | df = df[df["正确"] == 1] |
只分析正确试次 | 科研计算 §3 | 有些分析反而要看错误试次,想清楚 |
| 取列表/字符串的一段 | 切片 片段 | s[0:4] / lst[1:] |
含头不含尾 | Python核心 §4 | s[0:4] 取 4 个字符(0,1,2,3) |
| 倒过来 | 倒序 反转 | s[::-1] |
步长 -1 | Python核心 §4 | — |
| 按位置取元素 | 索引 第几个 | lst[0] / lst[-1] |
第一个 / 最后一个 | Python核心 §4 | 越界会 IndexError(切片不会) |
| 按名字从字典取值 | 字典取值 get | d.get("键", 默认值) |
键不存在也不报错 | Python核心 §1 | d["键"] 会报 KeyError,.get() 不会 |
| 去重 | 去重 唯一 | set(nums) / list(set(nums)) |
一行去重 | 阶段8 | 顺序会丢 |
| 分组 | 分组 groupby | df.groupby("条件")["反应时"].mean() |
按条件分组算平均 | 科学计算栈 §3 | 结果要 .reset_index() 才能存成正常 CSV |
4 算
| 我想做什么 | 搜索关键词 | 代码写法 | 一句话解释 | 出处 | 坑 |
|---|---|---|---|---|---|
| 对一个数组整体运算 | 向量化 不用for | arr + 10 / arr * 2 / arr ** 2 |
一次算完,快几百倍 | 科学计算栈 §1 | 有 for 循环通常就有优化空间 |
| 求和 | 求和 sum | arr.sum() / sum(lst) |
全部加起来 | 科学计算栈 §2 | — |
| 按列/按行求和 | axis 轴 行列 | arr.sum(axis=0) 每列arr.sum(axis=1) 每行 |
沿某个方向压缩 | 科学计算栈 §2 | ⚠️ axis=0 消掉行,搞反结果全错 |
| 平均 | 平均 mean 均值 | arr.mean() / df["rt"].mean() |
算术平均 | 科学计算栈 §2 | 空列表要先判断,否则除以 0 |
| 中位数 | 中位数 median | df["rt"].median() |
排中间那个数 | 阶段12 | 偶数个取中间两个的平均 |
| 标准差 | 标准差 std | df["rt"].std() / np.std(a) |
离散程度 | 阶段12 | np.std 默认除以 n,pd.Series.std 默认除以 n-1(样本标准差) |
| 最大/最小 | 最大 最小 max | arr.max() / min(lst) |
极值 | 科学计算栈 §2 | — |
| 一次算多个统计量 | agg 汇总 | df.groupby("条件")["rt"].agg(["mean","median","std","count"]) |
一张表给出多个量 | 科学计算栈 §3 | — |
| 两列算相关 | 相关 pearson | stats.pearsonr(x, y) |
返回 r 和 p |
科学计算栈 §5 | 别拿完全相同的数据试,会有精度警告 |
| 两组比均值 | t检验 ttest | stats.ttest_ind(g1, g2) |
独立样本 t 检验 | 科学计算栈 §5 | 同一批人前后测要用 ttest_rel |
| 同一批人前后比 | 配对 ttest | stats.ttest_rel(before, after) |
配对样本 t 检验 | 科学计算栈 §5 | — |
| 正态分布概率 | 正态 cdf pdf | stats.norm.pdf(0) 密度stats.norm.cdf(0) 累积 |
概率密度 / 累计概率 | 科学计算栈 §5 | — |
| 解线性方程组 | 解方程 solve | np.linalg.solve(A, b) |
解 Ax = b | 阶段9 | 比先求逆再乘更快更稳 |
| 求逆矩阵 | 逆矩阵 inv | np.linalg.inv(A) |
矩阵的"除法" | 阶段9 | det=0 时报 LinAlgError |
| 求行列式 | 行列式 det | np.linalg.det(A) |
一个数 | 阶段8 | 接近 0 说明接近奇异 |
| 求伪逆(共线时兜底) | 伪逆 pinv | np.linalg.pinv(A) |
不可逆时也能给个解 | 阶段16 | 底层就是 SVD |
| 求特征值(一般矩阵) | 特征值 eig | vals, vecs = np.linalg.eig(A) |
特征值 + 特征向量 | 阶段13 | 可能返回复数 |
| 求特征值(对称矩阵) | 特征值 eigh | vals, Q = np.linalg.eigh(A) |
更快更稳,自动升序 | 阶段15 | ⚠️ 喂非对称矩阵会静默给错结果 |
| 奇异值分解 | SVD svd | U, S, Vt = np.linalg.svd(A) |
任何矩阵都能分 | 阶段16 | U 和 Vt 大小不同,重构要截断 |
| 求矩阵的幂 | 矩阵幂 幂运算 | np.linalg.matrix_power(A, k) |
A 的 k 次方 | 阶段15 | 别用 A ** k(那是逐元素) |
| 求秩 | 秩 rank | np.linalg.matrix_rank(A) |
独立方向个数 | 阶段10 | 判共线性要看条件数,不是秩 |
| 求条件数 | 条件数 cond | np.linalg.cond(A) |
病态程度 | 阶段10 | > 30 警惕,> 1000 基本不可信 |
| 数值积分 | 积分 quad | scipy.integrate.quad(f, a, b) |
求定积分 | 阶段12 | 返回 (值, 误差) |
| 符号求导/积分 | sympy diff integrate | sp.diff(x**2, x)sp.integrate(x**2, x) |
解析解(带公式) | 阶段11 | sympify 字符串时符号要对上 |
| 把循环压成一行 | 推导式 | [i**2 for i in range(5)] |
列表推导 | Python核心 §4 | 超过两层就该写回 for |
| 带条件的推导式 | 推导式 条件 | [i for i in range(5) if i > 2](筛)[i if i > 2 else 0 for i in range(5)](换) |
筛子和加工 | Python核心 §4 | ⚠️ 两种 if 位置完全不同 |
| 省内存的"推导式" | 生成器 省内存 | (i**2 for i in range(10**7)) |
边用边算 | Python核心 §4 | 用完就空,不能遍历两次 |
| 交换两个变量 | 交换 互换 | a, b = b, a |
不用临时变量 | 阶段9 | — |
| 安全地比较小数 | 浮点数 isclose | math.isclose(a, b) |
避免精度问题 | Python核心 §7 | ⚠️ 永远别用 == 比浮点数 |
| 固定的随机数 | 随机种子 seed | rng = np.random.default_rng(42) |
让结果可复现 | 科研计算 §4 | 用 random 也要单独 random.seed(42) |
5 画
| 我想做什么 | 搜索关键词 | 代码写法 | 一句话解释 | 出处 | 坑 |
|---|---|---|---|---|---|
| 画折线图 | 折线 曲线 plot | plt.plot(x, y, label="曲线") |
趋势图 | 科学计算栈 §4 | — |
| 画柱状图 | 柱状 条形 bar | plt.bar(x, y, yerr=err) |
条件对比(论文标配) | 科学计算栈 §4 | yerr 加误差棒 |
| 画散点图 | 散点 scatter | plt.scatter(x, y) |
看相关、个体差异 | 科学计算栈 §4 | — |
| 画直方图 | 直方图 hist | plt.hist(data, bins=30) |
看分布(如反应时分布) | 科学计算栈 §4 | bins 决定柱子数量 |
| 加标题和轴标签 | 标题 标签 | plt.xlabel("x")plt.ylabel("y")plt.title("标题") |
标清楚画的是什么 | 科学计算栈 §4 | 图必须有轴标签,不然没人看得懂 |
| 显示图例 | 图例 legend | plt.legend() |
显示 label 的内容 |
科学计算栈 §4 | 要在 plot 的 label 之后调用 |
| 存成图片 | 保存 导出 savefig | plt.savefig("plot.png", dpi=150, bbox_inches="tight") |
存文件 | 科学计算栈 §4 | ⚠️ 必须在 plt.show() 之前 |
| 让图上能显示中文 | 中文 字体 方框 | plt.rcParams["font.sans-serif"] = ["Arial Unicode MS", "PingFang SC"]plt.rcParams["axes.unicode_minus"] = False |
中文和负号正常显示 | 科学计算栈 §4 | 第二行最容易忘,负号会变方框 |
| 生成画图用的坐标 | linspace 等间距 | x = np.linspace(-5, 5, 200) |
含终点,画图用这个 | 科学计算栈 §2 | arange 不含终点,容易少画一段 |
6 存
| 我想做什么 | 搜索关键词 | 代码写法 | 一句话解释 | 出处 | 坑 |
|---|---|---|---|---|---|
| 写文本文件 | 写文件 保存 | with open("out.txt", "w", encoding="utf-8") as f:f.write("内容\n") |
写到文件 | 阶段10 | ⚠️ write() 不会自动换行,要自己写 \n |
| 追加而不是覆盖 | 追加 append | with open("log.txt", "a", encoding="utf-8") as f: |
在末尾加 | 阶段10 | ⚠️ "w" 会立刻清空原文件,不可撤销 |
| 存表格成 CSV | 存csv 导出 | df.to_csv("out.csv", index=False) |
存成表格 | 科学计算栈 §3 | index=False,否则多存一列行号 |
| 存成 Parquet | 存parquet | df.to_parquet("out.parquet") |
大数据格式 | 科研计算 §5 | 需要 pyarrow |
| 建目录(不存在才建) | 建目录 mkdir | p.parent.mkdir(parents=True, exist_ok=True) |
避免"目录已存在"报错 | 阶段10 | 两个参数几乎总要带上 |
| 判断文件在不在 | 文件存在 exists | Path("a.txt").exists() |
检查存在性 | 阶段10 | — |
7 代码组织
| 我想做什么 | 搜索关键词 | 代码写法 | 一句话解释 | 出处 | 坑 |
|---|---|---|---|---|---|
| 定义函数 | 函数 def | def mean_of(nums):return sum(nums) / len(nums) |
包装一段逻辑 | 阶段4 | 想清楚"返回什么" |
| 定义带默认值的函数 | 默认参数 | def f(x, threshold=0.8): |
调用时可省略 | 阶段5 | ⚠️ 默认值别用可变对象(见下) |
| 要一个"默认为空列表"的参数 | 可变默认参数 | def add(x, lst=None):if lst is None:lst = [] |
用 None 占位 |
Python核心 §1 | ⚠️⚠️ def add(x, lst=[]) 是经典大坑 |
| 一次返回多个值 | 返回多个 元组 | def f(): return min(nums), max(nums)lo, hi = f() |
返回的是元组 | 阶段9 | — |
| 定义类 | 类 class | class Subject:def __init__(self, sid):self.sid = sid |
把数据和行为打包 | 阶段12 | self 是"这个实例自己" |
| 子类复用父类 | 继承 super | class Child(Parent):def __init__(self, x, y):super().__init__(x) |
先干父类的活 | 阶段13 | ⚠️ 不调 super().__init__ 会缺属性 |
让对象能 print 得好看 |
repr | def __repr__(self):return f"Subject({self.sid!r})" |
调试显示用 | 阶段12 | 不写会显示 <object at 0x...> |
让对象能 len() |
len 魔术方法 | def __len__(self):return len(self.rts) |
支持内置语法 | 阶段12 | — |
| 让方法像属性一样读 | property 只读 | @propertydef mean_rt(self):return sum(self._rts)/len(self._rts) |
s.mean_rt 不带括号 |
阶段13 | 默认不能赋值 |
| 复制一个列表 | 拷贝 copy | b = a.copy() / b = a[:] |
真的复制一份 | Python核心 §1 | b = a 不是复制,是贴了个新标签 |
| 深拷贝(嵌套结构) | 深拷贝 deepcopy | import copyb = copy.deepcopy(a) |
连里面也复制 | Python核心 §1 | 浅拷贝在嵌套时会"串味" |
| 判断是不是同一个对象 | is 身份 | a is b |
同一个对象? | Python核心 §2 | 只有判断 None 时才该用 is |
判断是不是 None |
None 判断 | if x is None: |
标准写法 | Python核心 §2 | 别写 == None |
| 把代码拆成多个文件 | 模块 import | # utils.py 里定义函数# main.py 里 import utilsutils.my_func() |
一个文件干一件事 | 阶段11 | 模块名 = 文件名去 .py |
| 让文件既能跑又能被导入 | main | if __name__ == "__main__":main() |
直接运行才执行 | 阶段11 | 每个可运行文件都该有这个块 |
| 装一个环境 | 虚拟环境 venv | python -m venv .venvsource .venv/bin/activate |
独立包目录 | 阶段16 | ⚠️ .venv/ 别提交到 Git |
| 记录依赖清单 | requirements | pip freeze > requirements.txtpip install -r requirements.txt |
让别人能复现 | 阶段16 | — |
用 with 管资源 |
with 上下文 | with open("a.txt") as f: |
出块自动清理 | Python核心 §6 | 打开文件一律用 |
| 给函数加功能但别改它 | 装饰器 decorator | @functools.wraps(func)def wrapper(*args, **kwargs): |
包一层 | Python核心 §6 | functools.wraps 别省 |
8 排错
| 我想做什么 | 搜索关键词 | 代码写法 | 一句话解释 | 出处 | 坑 |
|---|---|---|---|---|---|
| 看报错该怎么读 | 报错 traceback | 先看最后一行(类型+原因) 再看倒数第二三行(文件+行号) |
读报错的顺序 | 工程能力 §3 | 最后一行才是错误本身 |
| 在代码里下断点 | 断点 调试 breakpoint | breakpoint() |
程序在这里暂停 | 工程能力 §3 | ⚠️ 提交前记得删掉 |
| 调试器怎么操作 | pdb 命令 | p 看变量 / n 下一步 / c 继续 / q 退出 |
交互式调试 | 工程能力 §3 | 最常用的是 p、n、c |
| 打印变量名和值 | f-string 调试 | print(f"{total=}") |
自动带上变量名 | 阶段14 | 比 print(total) 清楚得多 |
| 主动报错(数据不对就停) | 抛异常 raise | raise ValueError(f"反应时必须为正,收到 {rt}") |
快速失败 | 阶段12 | 比让它带着错数据往下跑好 |
| 保留错误原因 | raise from | raise ValueError("...") from e |
报错链不断 | 阶段14 | — |
| 处理可能的错误 | try except | try:rt = float(s)except ValueError:rt = 0.0 |
出错时兜底 | 阶段10 | ⚠️ 别写 except Exception: pass(静默吞错) |
| 文件可能不存在 | FileNotFound 处理 | try:with open(p) as f: ...except FileNotFoundError:... |
缺文件时给默认 | 阶段10 | 文件必须存在时别抓,让它崩 |
| 写测试 | 测试 assert pytest | assert mean_of([1,2,3]) == 2 |
检查用例 | 阶段14 | 小项目用 assert 就够 |
| 用 pytest 跑测试 | pytest | pytest -v |
跑所有 test_*.py |
工程能力 §4 | 文件名要 test_ 开头才会被发现 |
| 检查两个形状能不能运算 | 广播 广播失败 | 右对齐逐位比:相等或其中一个是 1 | numpy 广播规则 | 科学计算栈 §2 | ⚠️ 先 print(a.shape) |
| 把一个一维数组竖起来 | reshape 升维 | c = np.array([100,200]).reshape(2, 1) |
让它能按行广播 | 科学计算栈 §2 | — |
| 看环境里装了什么 | 版本 装了哪些包 | import importlib.metadata as md; md.version("numpy") |
查包版本 | 阶段16 | 排查"在我电脑上能跑" |
| 看 Python 是哪个 | 解释器 路径 | import sys; print(sys.executable) |
当前用的解释器 | 阶段16 | 虚拟环境激活后会变 |
9 Git
| 我想做什么 | 搜索关键词 | 代码写法 | 一句话解释 | 出处 | 坑 |
|---|---|---|---|---|---|
| 把目录变成仓库 | 初始化 init | git init |
一个项目只做一次 | 工程能力 §1 | — |
| 看现在什么情况 | 状态 status | git status |
最常敲,只读不改 | 工程能力 §1 | 任何 Git 问题先跑它 |
| 看改了什么 | 差异 diff | git diff |
逐行显示改动 | 阶段13 | git diff --staged 看暂存区的 |
| 把改动放进暂存区 | 暂存 add | git add 文件名 |
挑要提交的 | 工程能力 §1 | 先 git status 再 add |
| 提交一版 | 提交 commit | git commit -m "修复空行崩溃" |
存一版历史 | 工程能力 §1 | 信息要动词开头 + 说清做了什么 |
| 看历史 | 日志 log | git log --oneline |
一行一条 | 阶段13 | --graph 看分支图 |
| 建分支并切过去 | 分支 branch | git switch -c 新功能 / git checkout -b 新功能 |
在平行世界改代码 | 阶段15 | 分支只是个指针,几乎零成本 |
| 切回主干 | 切换 switch | git switch main |
文件变成主干的样子 | 阶段15 | — |
| 合并分支 | 合并 merge | git merge 新功能 |
把分支的改动并进来 | 阶段15 | 可能冲突(见下) |
| 解决冲突 | 冲突 conflict | 手工编辑文件,删掉 <<<<<<<、=======、>>>>>>> 三行,然后 git add + git commit |
三行标记必须全删 | 阶段15 | ⚠️ 不删标记 = 语法错误 |
| 连上 GitHub | 远程 remote push | git remote add origin <地址>git push -u origin main |
推到远程 | 阶段15 | -u 只在首次需要 |
| 拉取别人的更新 | 拉取 pull fetch | git pull(= fetch + 合并)git fetch(只下载,不动工作区) |
同步远程 | 阶段15 | 不确定时先 fetch 看看 |
| 撤销工作区改动 | 撤销 restore | git restore 文件 |
⚠️ 改动会永久丢失 | 阶段15 | 用之前先 git diff 看清楚 |
| 从暂存区拿出来 | 取消暂存 | git restore --staged 文件 |
文件内容不变 | 阶段15 | 安全操作 |
| 把改动先收起来 | 暂存 stash | git stash / git stash pop |
最安全的"先放一放" | 阶段15 | 拿不准时用这个 |
| 忽略某些文件 | gitignore 忽略 | 见 .gitignore 一节 |
别提交缓存/密码/大数据 | 工程能力 §1 | ⚠️ 注释必须单独一行,行尾注释会让规则失效 |
| 停止跟踪某个文件 | rm cached | git rm --cached 文件 |
从 Git 移除但保留本地 | 阶段13 | .gitignore 对已跟踪文件无效,要用这个 |
.gitignore 的标准写法:
# 注释必须单独占一行(写行尾会让规则失效!)
# Python 缓存
__pycache__/
*.pyc
# 密钥(⚠️ 绝不能提交)
.env
# 分析产物(可从原始数据重新生成)
data/processed/
results/
# 系统文件
.DS_Store
⚠️ 提交过密钥就必须换掉。即使后来删了文件,它仍在 Git 历史里,别人 clone 下来还能翻出来。
10 环境
| 我想做什么 | 搜索关键词 | 代码写法 | 一句话解释 | 出处 | 坑 |
|---|---|---|---|---|---|
| 建虚拟环境 | venv 虚拟环境 | python -m venv .venv |
独立的包目录 | 阶段16 | 每个项目一个 |
| 激活/退出 | 激活 activate | source .venv/bin/activatedeactivate |
让 python 指向它 | 阶段16 | 激活后 which python 会变 |
| 装包 | 安装 pip install | pip install numpy pandas |
装包(只影响当前环境) | 阶段16 | — |
| 按清单装包 | requirements | pip install -r requirements.txt |
一键复现环境 | 阶段16 | — |
| 看装了哪些包 | 列出 pip list | pip list / pip freeze |
列出已装包和版本 | 阶段16 | freeze 输出可以直接当清单 |
| conda 建环境 | conda create | conda create -n myenv python=3.12conda activate myenv |
比 venv 多管非 Python 依赖 | 阶段16 | 装 PyTorch 时更省事 |
| 导出/重建 conda 环境 | environment.yml | conda env export > environment.ymlconda env create -f environment.yml |
完整环境快照 | 阶段16 | — |
| 查某个包的版本 | 版本 version | import importlib.metadata as mdmd.version("numpy") |
用于排查 | 阶段16 | — |
本机常用命令速记(你的 Python 在 miniconda 里):
# 跑脚本
~/miniconda3/bin/python script.py
# 装包
~/miniconda3/bin/python -m pip install 包名
# 看版本
~/miniconda3/bin/python -c "import sys; print(sys.version)"
11 怎么练这张表
别背。 这张表是用来查的。真正的掌握方式是:
| 步 | 做什么 |
|---|---|
| 1 | 遇到问题时先来这张表搜(Cmd+F 搜关键词那一列) |
| 2 | 找到了就抄过去用,改一个变量名试试 |
| 3 | 用着用着你就记住了,这是提取练习(阶段 14 讲过) |
| 4 | 表里查不到的,去 Python 官方文档 或 pandas 文档 搜 |
⭐ 记住这张表的存在,比记住表里每一行重要得多。
知道"有这么一个东西可以用",就已经解决了一半问题。
12 自检
这张表里的代码写法都在四篇笔记里实跑验证过。想自己复现:
cd ~/Desktop/大一/编程/教材
~/miniconda3/bin/python 自检脚本.py
它会核验笔记里各条结论(别名共享、可变默认参数、广播、向量化加速、随机种子等)。
另外,全站自检可以跑:
~/miniconda3/bin/python ~/Desktop/大一/验证.py