Jupyter Notebook 常用快捷键与实用技巧
Jupyter Notebook 是数据科学和机器学习领域最流行的交互式开发环境。熟练掌握它的快捷键和技巧,能大幅提升日常开发效率。
可以点击帮助菜单查看快捷键:


本文所有快捷键均以 Windows/Linux 为基准。Mac 用户请将
Ctrl替换为Cmd,将Alt替换为Option。
两种操作模式
Jupyter Notebook 有两种模式,所有快捷键都依赖于当前所处的模式,这是初学者最容易忽略的关键点:
| 模式 | Cell 边框颜色 | 进入方式 | 作用 |
|---|---|---|---|
| 命令模式(Command Mode) | 蓝色 | 按 Esc 或点击 Cell 左侧空白区 |
对 Cell 进行管理操作(新增、删除、移动等) |
| 编辑模式(Edit Mode) | 绿色 | 按 Enter 或双击 Cell 内部 |
在 Cell 内部编写和修改代码或文本 |
简单记忆:绿色 = 可以打字编辑;蓝色 = 可以管理 Cell。进入编辑模式前,请先用 Esc 退出,再用 Enter 进入,养成这个习惯可以避免大量误操作。
运行 Cell 的快捷键(通用)
以下三个快捷键在两种模式下均可使用,是最高频的操作,务必熟记:
| 快捷键 | 作用 | 适用场景 |
|---|---|---|
Shift + Enter |
运行当前 Cell,并自动跳转到下一个 Cell | 最常用,依次向下执行代码 |
Ctrl + Enter |
运行当前 Cell,停留在当前 Cell | 反复测试同一段代码时使用 |
Alt + Enter |
运行当前 Cell,并在下方插入一个新 Cell | 边运行边向下新增代码块时使用 |
命令模式快捷键(蓝色边框)
按 Esc 进入命令模式后,可使用以下快捷键:
1、Cell 的插入与删除
| 快捷键 | 作用 |
|---|---|
A |
在当前 Cell 上方插入新 Cell(Above) |
B |
在当前 Cell 下方插入新 Cell(Below) |
D, D(连按两次 D) |
删除当前 Cell |
Z |
撤销删除(恢复刚刚删除的 Cell) |
X |
剪切当前 Cell |
C |
复制当前 Cell |
V |
在当前 Cell 下方粘贴 Cell |
Shift + V |
在当前 Cell 上方粘贴 Cell |
2、Cell 类型切换
Jupyter 中的 Cell 有三种类型,可以随时切换:
| 快捷键 | 切换为 | 用途 |
|---|---|---|
Y |
Code(代码) | 编写并运行 Python 代码 |
M |
Markdown(标记语言) | 编写格式化文档、标题、说明文字 |
R |
Raw(原始文本) | 原样输出文本,不执行也不渲染 |
1 ~ 6 |
Markdown 标题级别 H1 ~ H6 | 快速将 Cell 设为对应级别的标题(会自动切换到 Markdown 模式) |
3、Cell 的选择与合并
| 快捷键 | 作用 |
|---|---|
↑ / K |
选中上方的 Cell |
↓ / J |
选中下方的 Cell |
Shift + ↑ / Shift + K |
向上连续选中多个 Cell |
Shift + ↓ / Shift + J |
向下连续选中多个 Cell |
Shift + M |
将选中的多个 Cell 合并为一个 |
4、输出与显示控制
| 快捷键 | 作用 |
|---|---|
O |
折叠/展开当前 Cell 的输出结果 |
Shift + O |
切换当前 Cell 输出区域的滚动模式(输出内容很长时使用) |
L |
显示/隐藏当前 Cell 的行号 |
F |
在 Cell 中查找和替换文本 |
5、内核与界面操作
| 快捷键 | 作用 |
|---|---|
I, I(连按两次 I) |
中断当前正在运行的 Cell(相当于 Ctrl+C) |
0, 0(连按两次 0) |
重启内核(会清空所有已运行的变量,谨慎使用) |
H |
打开快捷键帮助面板(显示所有可用快捷键) |
P |
打开命令面板,可以搜索所有 Jupyter 功能 |
Space |
向下滚动页面 |
Shift + Space |
向上滚动页面 |
S / Ctrl + S |
保存 Notebook |
编辑模式快捷键(绿色边框)
按 Enter 进入编辑模式后,可使用以下快捷键在 Cell 内部操作:
1、代码编辑
| 快捷键 | 作用 |
|---|---|
Tab |
代码自动补全(输入部分函数名/变量名后按 Tab 补全) |
Shift + Tab |
查看光标所在函数的参数说明(弹出文档提示,按一次显示简要,连按两次显示完整文档) |
Ctrl + / |
注释/取消注释当前行或选中的多行代码 |
Ctrl + D |
删除当前整行 |
Ctrl + Shift + - |
在光标处将当前 Cell 拆分为两个 Cell |
Ctrl + Z |
撤销(恢复上一步编辑) |
Ctrl + Y |
重做(取消撤销) |
Ctrl + A |
全选当前 Cell 内的所有内容 |
Ctrl + Home |
跳转到 Cell 内容的最开头 |
Ctrl + End |
跳转到 Cell 内容的最末尾 |
Ctrl + ← / Ctrl + → |
按单词跳转光标(快速移动到上/下一个单词) |
2、从编辑模式返回命令模式
| 快捷键 | 作用 |
|---|---|
Esc |
退出编辑模式,返回命令模式(Cell 边框变蓝) |
Ctrl + M |
同 Esc,退出编辑模式 |
魔法命令(Magic Commands)
魔法命令是 Jupyter 内置的特殊指令,以 %(单行)或 %%(整个 Cell)开头,用于完成计时、调试、文件操作等常用任务,无需安装任何库即可使用。
1、代码计时
实例
%timeit [x**2 for x in range(1000)]
# 输出示例:98.3 µs ± 1.2 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
# %%time:对整个 Cell 的代码只计时一次(适合测试耗时较长的完整流程)
%%time
import time
data = [x**2 for x in range(100000)]
time.sleep(1)
# 输出示例:
# CPU times: user 45.2 ms, sys: 8.1 ms, total: 53.3 ms
# Wall time: 1.05 s
2、图表内嵌显示
实例
# 通常放在 Notebook 的第一个 Cell 中,整个 Notebook 只需执行一次
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2 * np.pi, 100)
plt.plot(x, np.sin(x))
plt.title('正弦波')
plt.show()
# %matplotlib notebook:启用交互式图表,可以缩放、平移(但不能与 inline 同时使用)
# %matplotlib notebook
3、查看与管理变量
实例
%who
# 输出示例:data plt x
# %whos:比 %who 更详细,同时显示变量的类型和值
%whos
# 输出示例:
# Variable Type Data/Info
# ----------------------------
# x ndarray 100: [0. 0.06 ... 6.28]
# data list n=100000
# %reset:清空所有变量(会弹出确认提示,适合重新开始计算时使用)
%reset
# %reset -f:强制清空所有变量,不弹出确认提示(-f 表示 force)
%reset -f
4、文件与路径操作
实例
%pwd
# 输出示例:'/home/user/notebooks'
# %ls:列出当前目录下的所有文件(Windows 用户可能需要用 %ls 或直接用 !dir)
%ls
# 输出示例:data.csv model.py notebook.ipynb
# %%writefile:将整个 Cell 的内容写入到指定文件(常用于快速创建脚本文件)
%%writefile hello.py
def greet(name):
print(f"你好,{name}!")
greet("世界")
# 执行后会在当前目录生成 hello.py 文件,内容就是 Cell 中的代码
# %run:运行一个外部 Python 脚本文件,并将其变量导入当前命名空间
%run hello.py
# 输出:你好,世界!
# %load:将外部脚本文件的内容加载到当前 Cell(不会自动执行,仅加载代码)
%load hello.py
5、系统命令执行
实例
!pip install pandas # 安装 Python 包
!pip list # 查看已安装的包列表
!python --version # 查看 Python 版本
# 也可以将命令输出结果保存为 Python 变量
files = !ls -1 # 执行 ls 命令,结果赋值给 files 变量
print(files) # files 是一个列表,每个文件名是一个元素
6、查看历史与调试
实例
%history
# 加 -n 显示行号,加 -l 5 只显示最近 5 条
%history -n -l 5
# %debug:在代码报错后,在下一个 Cell 执行 %debug 可以进入交互式调试模式
# 可以在调试模式下输入变量名查看值,输入 q 退出调试
# 例如运行了一段报错的代码后:
%debug
7、渲染特殊内容
实例
%%html
<h3 style="color: steelblue;">这是一个 HTML 标题</h3>
<p style="font-size: 16px;">可以在 Notebook 中直接渲染 HTML 内容。</p>
# %%latex:将 Cell 内容作为 LaTeX 公式渲染(常用于写数学公式)
%%latex
$$E = mc^2$$
$$\int_0^\infty e^{-x^2} dx = \frac{\sqrt{\pi}}{2}$$
实时查看运行进度
在处理大量数据或长时间循环时,实时查看进度非常重要。以下是几种常用的进度显示方案。
1、tqdm 进度条(推荐)
tqdm 是最常用的进度条库,支持循环、Pandas、多种 Jupyter 场景,安装命令:
pip install tqdm
实例
import time
# 基本用法:将可迭代对象包裹在 tqdm() 中即可自动显示进度条
for i in tqdm(range(100)):
time.sleep(0.05) # 模拟耗时操作
# 输出:显示进度条、已完成百分比、已用时间、预计剩余时间
# 配合 enumerate 使用
data = list(range(50))
for i, item in enumerate(tqdm(data, desc="处理数据")):
# desc 参数设置进度条左侧的标签文字
time.sleep(0.05)
# 手动控制进度(适用于不确定总量的场景)
with tqdm(total=100, desc="下载进度") as pbar:
for chunk in range(10):
time.sleep(0.1)
pbar.update(10) # 每次更新 10 个单位的进度
pbar.set_postfix({"chunk": chunk}) # 在进度条右侧显示附加信息
实例
import pandas as pd
from tqdm.notebook import tqdm
tqdm.pandas() # 启用 Pandas 集成,只需执行一次
df = pd.DataFrame({'value': range(1000)})
# 使用 progress_apply 替代普通的 apply,即可自动显示进度
result = df['value'].progress_apply(lambda x: x ** 2)
2、display + clear_output 动态刷新输出
当不想安装 tqdm 时,可以用 IPython 内置的 clear_output 实现动态刷新效果:
实例
import time
total = 50
for i in range(total):
time.sleep(0.1)
# clear_output(wait=True):清除上一次的输出,wait=True 表示等到有新内容时再清除,
# 避免闪烁。注意:这会清除当前 Cell 的所有输出
clear_output(wait=True)
# 手动绘制一个简单的文字进度条
done = int((i + 1) / total * 30) # 计算已完成的格数(共 30 格)
bar = '█' * done + '░' * (30 - done) # █ 表示完成,░ 表示未完成
pct = (i + 1) / total * 100
print(f"进度:[{bar}] {pct:.1f}% ({i+1}/{total})")
print("✅ 全部完成!")
3、实时绘制图表进度
在模型训练等场景中,可以每隔一段时间动态更新图表,实时观察指标变化趋势:
实例
import matplotlib.pyplot as plt
from IPython.display import clear_output, display
import numpy as np
import time
losses = [] # 存储每一步的损失值,模拟训练过程
for step in range(50):
# 模拟训练:生成一个逐渐下降的损失值
loss = 1 / (step + 1) + np.random.uniform(0, 0.05)
losses.append(loss)
# 每 5 步更新一次图表,避免刷新过于频繁
if (step + 1) % 5 == 0:
clear_output(wait=True)
fig, ax = plt.subplots(figsize=(8, 4))
ax.plot(losses, color='steelblue', linewidth=2)
ax.set_title(f'训练进度(Step {step + 1}/50)')
ax.set_xlabel('Step')
ax.set_ylabel('Loss')
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.show() # 在 clear_output 之后调用 show,图表会在同一位置刷新
time.sleep(0.1)
print("训练完成!最终 Loss:", f"{losses[-1]:.4f}")
查看文档与代码的技巧
1、快速查看函数文档
实例
import numpy as np
np.array?
# 会弹出 np.array 的参数说明、功能描述
# 方法二:在函数名后加 ??,弹出完整文档,包括源代码(如果源码可获取)
np.array??
# 方法三:在函数括号内按 Shift + Tab
# 例如输入 np.linspace( 后(括号内)按 Shift + Tab,弹出参数提示
# 连按两次 Shift + Tab 显示更完整的文档
# 方法四:使用 help() 函数(输出更完整,但显示在输出区域而非弹窗)
help(np.array)
2、用 display 显示多个输出结果
Jupyter 默认每个 Cell 只显示最后一个表达式的值。通过 display() 可以在一个 Cell 中输出多个结果:
实例
from IPython.display import display
df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df2 = pd.DataFrame({'X': [7, 8, 9], 'Y': [10, 11, 12]})
# 不用 display 时,只有最后一个 DataFrame 会被显示
# df1 # 不会显示
# df2 # 只有这个会显示
# 使用 display() 可以同时显示多个表格,且格式美观
display(df1)
display(df2)
实例
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all" # 默认是 "last_expr",改为 "all" 后
# Cell 中每个表达式都会自动输出结果
1 + 1 # 输出 2
2 + 2 # 输出 4(默认情况下这行不会输出)
"hello" # 输出 'hello'
3、抑制不需要的输出
实例
import numpy as np
# 问题:plt.plot() 会在显示图表的同时,输出一个多余的对象描述,如:
# [<matplotlib.lines.Line2D object at 0x7f3b1234>]
# 解决方法:在语句末尾加分号(;),可以抑制最后一个表达式的输出,但不影响图表显示
plt.plot(np.sin(np.linspace(0, 2*np.pi, 100)));
# 加了分号后,图表正常显示,但多余的对象描述不会出现
其他实用技巧
1、查看变量的中间值(不中断代码执行)
实例
# 将中间结果赋值给变量的同时,用括号包裹整行让其输出
import numpy as np
# 普通写法(看不到 result 的值)
result = np.array([1, 2, 3]) * 2
# 加括号的写法(赋值的同时打印出 result 的值)
(result := np.array([1, 2, 3]) * 2) # Python 3.8+ 海象运算符写法
# 输出:array([2, 4, 6])
# 或者更简单:直接在赋值后另起一行写变量名
result = np.array([1, 2, 3]) * 2
result # Jupyter 会自动显示最后一个表达式的值
2、引用上一次的输出结果
实例
# _ :上一个 Cell 的输出结果
# __ :上上个 Cell 的输出结果
# _3 :第 3 个 Cell(Out[3])的输出结果(数字对应左侧的 Out 编号)
# 例如:
1 + 1
# Out[1]: 2
_ # 引用上一个输出,值为 2
# Out[2]: 2
_ * 10 # 用上一个输出继续计算
# Out[3]: 20
_3 + 5 # 引用 Out[3] 的结果 20,加 5
# Out[4]: 25
3、在 Notebook 中展示富文本内容
实例
# 渲染 Markdown 格式文本
display(Markdown("## 这是标题\n\n**加粗文字**,*斜体文字*,`代码`"))
# 渲染 HTML
display(HTML("<span style='color:red; font-size:20px'>红色大字</span>"))
# 显示网络图片(传入图片 URL)
display(Image(url="https://www.runoob.com/images/runoob-logo.png", width=200))
# 显示本地图片(传入本地文件路径)
# display(Image(filename="./chart.png"))
4、给 Cell 添加计时标注(自动在输出中显示耗时)
实例
# pip install jupyter-contrib-nbextensions
# 简单方案:用装饰器或上下文管理器封装计时逻辑,在任意代码块使用
import time
from contextlib import contextmanager
@contextmanager
def timer(label="耗时"):
start = time.time()
try:
yield
finally:
elapsed = time.time() - start
print(f"⏱ {label}:{elapsed:.3f} 秒")
# 使用方式:with timer() 包裹任意代码块,执行完毕后自动打印耗时
with timer("数据处理"):
data = [x ** 2 for x in range(1000000)]
# 输出:⏱ 数据处理:0.087 秒
5、快速查看当前 Notebook 所有快捷键
在命令模式(蓝色边框)下按 H,或通过菜单 Help → Keyboard Shortcuts,可以打开完整的快捷键帮助面板,随时查阅所有可用操作。
常用快捷键速查表
| 操作 | 快捷键 | 所在模式 |
|---|---|---|
| 运行 Cell 并跳到下一个 | Shift + Enter |
通用 |
| 运行 Cell 停留原位 | Ctrl + Enter |
通用 |
| 运行 Cell 并在下方新建 | Alt + Enter |
通用 |
| 进入编辑模式 | Enter |
命令模式 |
| 退出编辑模式 | Esc |
编辑模式 |
| 上方插入 Cell | A |
命令模式 |
| 下方插入 Cell | B |
命令模式 |
| 删除 Cell | D, D |
命令模式 |
| 撤销删除 Cell | Z |
命令模式 |
| 切换为代码 Cell | Y |
命令模式 |
| 切换为 Markdown Cell | M |
命令模式 |
| 合并选中的多个 Cell | Shift + M |
命令模式 |
| 中断内核(停止运行) | I, I |
命令模式 |
| 重启内核 | 0, 0 |
命令模式 |
| 显示快捷键帮助 | H |
命令模式 |
| 代码自动补全 | Tab |
编辑模式 |
| 查看函数参数/文档 | Shift + Tab |
编辑模式 |
| 注释/取消注释 | Ctrl + / |
编辑模式 |
| 在光标处拆分 Cell | Ctrl + Shift + - |
编辑模式 |
| 保存 Notebook | S / Ctrl + S |
命令模式 / 编辑模式 |
