现在位置: 首页 > Jupyter Notebook 教程 > 正文

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:对单行代码进行多次重复计时,取平均值,结果更准确(适合测试简短表达式的性能)
%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、图表内嵌显示

实例

# %matplotlib inline:将图表直接嵌入 Notebook 中显示(最常用,静态图)
# 通常放在 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:列出当前命名空间中所有已定义的变量名
%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:显示当前工作目录(Print Working Directory)
%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:查看本次会话中执行过的所有命令历史
%history
# 加 -n 显示行号,加 -l 5 只显示最近 5 条
%history -n -l 5

# %debug:在代码报错后,在下一个 Cell 执行 %debug 可以进入交互式调试模式
# 可以在调试模式下输入变量名查看值,输入 q 退出调试
# 例如运行了一段报错的代码后:
%debug

7、渲染特殊内容

实例

# %%html:将 Cell 内容作为 HTML 渲染输出(可以嵌入自定义样式和交互元素)
%%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

实例

from tqdm.notebook import tqdm   # 在 Jupyter 中使用 notebook 版本,显示效果更美观
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})  # 在进度条右侧显示附加信息

实例

# tqdm 与 Pandas 集成:对 DataFrame 的 apply 操作显示进度
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 实现动态刷新效果:

实例

from IPython.display import 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("&#x2705; 全部完成!")

3、实时绘制图表进度

在模型训练等场景中,可以每隔一段时间动态更新图表,实时观察指标变化趋势:

实例

%matplotlib inline
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、快速查看函数文档

实例

# 方法一:在函数名后加 ?,在 Notebook 底部弹出文档面板
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 中输出多个结果:

实例

import pandas as pd
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)

实例

# 技巧:修改 Notebook 配置,让每个表达式的值都自动显示(无需手动调用 display)
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 matplotlib.pyplot as plt
import numpy as np

# 问题:plt.plot() 会在显示图表的同时,输出一个多余的对象描述,如:
# [<matplotlib.lines.Line2D object at 0x7f3b1234>]

# 解决方法:在语句末尾加分号(;),可以抑制最后一个表达式的输出,但不影响图表显示
plt.plot(np.sin(np.linspace(0, 2*np.pi, 100)));
# 加了分号后,图表正常显示,但多余的对象描述不会出现

其他实用技巧

1、查看变量的中间值(不中断代码执行)

实例

# 技巧:利用 Python 赋值语句同时返回值的特性,
# 将中间结果赋值给变量的同时,用括号包裹整行让其输出
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、引用上一次的输出结果

实例

# Jupyter 内置了特殊变量,可以快速引用历史输出:
# _     :上一个 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 中展示富文本内容

实例

from IPython.display import display, HTML, Image, Markdown, Audio, Video

# 渲染 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 添加计时标注(自动在输出中显示耗时)

实例

# 安装 jupyter-contrib-nbextensions 可以获得更多扩展功能
# 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"&#x23f1; {label}:{elapsed:.3f} 秒")

# 使用方式:with timer() 包裹任意代码块,执行完毕后自动打印耗时
with timer("数据处理"):
    data = [x ** 2 for x in range(1000000)]
# 输出:&#x23f1; 数据处理: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 命令模式 / 编辑模式