Jupyter Notebook 效率技巧

FreeGuideOnline 最新 2026-07-10

python %time sum(range(1000000)) %timeit sum(range(1000000))


- **`%prun`**  
用 Python 的性能分析器运行代码,找出耗时函数。  
```python
%prun my_slow_function()
  • %debug
    当代码抛出异常后,输入 %debug 会进入事后调试模式,你可以查看变量、逐行追踪。

  • %store%store -r
    在 notebook 之间持久化变量。例如 %store df 保存 DataFrame,另一个 notebook 用 %store -r df 恢复。

  • %who / %whos
    列出当前命名空间中的变量及其类型,%whos 还会显示更多信息,是清理内存前的检查利器。

  • %env
    查看或设置环境变量,例如 %env MY_VAR=hello

2.2 单元格魔法命令

  • %%timeit
    测量整个单元格的执行时间,自动多次运行。

    %%timeit
    import numpy as np
    arr = np.random.randn(100, 100)
    np.dot(arr, arr.T)
    
  • %%writefile my_script.py
    将单元格内容直接写入一个文件,方便提取模块。

  • %%bash / %%python2
    在单元格中运行其他语言的代码(需要对应的内核支持)。%%bash 可以执行 shell 命令,非常适合短暂的文件操作。

2.3 外部代码与可视化集成

  • %load:加载外部脚本到当前单元格,例如 %load myscript.py
  • %run:直接运行外部 Python 脚本,脚本中的变量会进入当前命名空间。
  • %matplotlib inline / notebook
    • inline 生成静态图表并嵌入 notebook。
    • notebook (或 %matplotlib widget) 启用可交互的绘图,支持缩放、平移等操作。

3. 扩展插件:颠覆 Noteboook 体验

Jupyter Notebook 的强大很大程度上来自社区扩展。通过 jupyter_contrib_nbextensions 可以获得众多功能增强。

安装与开启

pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user

启动 notebook 后,主页会出现 Nbextensions 标签页,勾选即可启用。

3.1 必装扩展推荐

  • Hinterland
    在任意代码单元格中提供关键字自动补全,无需按 Tab,体验类似现代 IDE。

  • Table of Contents (2)
    基于 Markdown 标题自动生成可导航的目录侧边栏,长 notebook 的救星。

  • Collapsible Headings
    让你的标题可以折叠区域内的单元格,轻松整理长文档。

  • Notify
    长时间运行的单元格完成后,通过浏览器通知提醒你。再也不用频繁切换窗口查看进度。

  • ExecuteTime
    在每个单元格下方显示执行的时间和持续时间,帮助定位性能瓶颈。

  • Variable Inspector
    类似 MATLAB 的工作区,在一个浮动面板中显示所有变量及其类型、大小和内容摘要。

  • ScrollDown
    执行单元格后自动滚动到底部,让输出始终可见。

4. 内核与内存管理技巧

长时间运行的 Notebook 容易内存膨胀、变量污染,以下技巧帮你保持内核清爽。

4.1 快速重启与清输出

不要只依赖手动重启。在 Kernel 菜单中使用:

  • Restart & Clear Output:重启内核并擦除所有输出,适合多次试验后得到干净的结果。
  • Restart & Run All:从第一个单元格依次重新执行全部,确保笔记本从头到尾可复现。

4.2 变量清理

使用 %reset 命令清除所有变量(会要求确认)。

%reset -f  # -f 强制清除,无需确认

如果只想删除部分大对象,可以用 del 并配合 gc 模块:

import gc
del df_large
gc.collect()

4.3 中断长时间运行的内核

点击工具栏的 Stop 按钮或按 I, I (命令模式连按两次 I) 可以中断执行,但不会丢失已有变量。这比直接重启内核更温和。

5. 输出与可视化的精细控制

5.1 省略冗长输出

在 pandas DataFrame 显示中,默认会截断行和列。你可以通过设置选项调整:

import pandas as pd
pd.set_option('display.max_columns', None)  # 显示所有列
pd.set_option('display.max_rows', 50)       # 最多显示50行

对于任意对象的输出,可以用 ; 抑制最后一个表达式的打印。

5.2 多输出与 Matplotlib 并发图

一个单元格可以有多个输出,无需多次执行。例如:

from IPython.display import display
import pandas as pd

df1 = pd.DataFrame({'A':[1,2]})
df2 = pd.DataFrame({'B':[3,4]})
display(df1, df2)

绘制多个 Matplotlib 图时,在同一个单元格里使用多个 plt.figure() 即可同时渲染。

5.3 富文本与 HTML 输出

通过 IPython.displayHTML, Markdown, Image 等可以直接在单元格输出富媒体内容。

from IPython.display import HTML
HTML('<h2 style="color:blue;">自定义标题</h2>')