Jupyter Notebook: распространённые горячие клавиши и практические советы
Jupyter Notebook — самая популярная интерактивная среда разработки в области науки о данных и машинного обучения. Освоение его горячих клавиш и приёмов может значительно повысить эффективность повседневной разработки.
Вы можете нажать меню «Справка», чтобы просмотреть сочетания клавиш:


Все сочетания клавиш в этой статье основаны наWindows/Linuxкак на эталоне. Пользователям Mac следует заменить
CtrlwithCmd, и заменитьAltwithOption。
Два режима работы
Jupyter Notebook имеет два режима,все сочетания клавиш зависят от текущего режима, и это ключевой момент, который упускают большинство новичков:
| Mode | Цвет границы ячейки | Как войти | Функция |
|---|---|---|---|
| Командный режим | Синий | нажмитеEscили щёлкните пустую область слева от ячейки |
Управление ячейками (добавление, удаление, перемещение и т. д.) |
| Режим редактирования | Зелёный | нажмитеEnterили дважды щёлкните внутри ячейки |
Писать и изменять код или текст внутри ячейки |
Быстрый приём для запоминания:Зелёный = можно печатать и редактировать; Синий = можно управлять ячейками. Перед входом в режим редактирования сначала используйтеEscчтобы выйти, затем используйтеEnterчтобы войти. Выработка этой привычки поможет избежать многих случайных действий.
Сочетания клавиш для запуска ячеек (универсальные)
Следующие три сочетания клавиш можно использовать в обоих режимах. Это самые частые операции, поэтому обязательно запомните их:
| Горячая клавиша | Функция | Сценарий применения |
|---|---|---|
Shift + Enter |
Запустить текущую ячейку и автоматически перейти к следующей ячейке | Самый распространённый: последовательное выполнение кода сверху вниз |
Ctrl + Enter |
Запустить текущую ячейку и остаться на текущей ячейке | Используйте при многократном тестировании одного и того же кода |
Alt + Enter |
Запустить текущую ячейку и вставить новую ячейку ниже | Используйте при добавлении блоков кода ниже во время выполнения |
Сочетания клавиш режима команд (синяя рамка)
нажмитеEscПосле входа в режим команд можно использовать следующие сочетания клавиш:
1. Вставка и удаление ячеек
| Горячая клавиша | Функция |
|---|---|
A |
В текущей ячейкеВышеВставить новую ячейку (выше) |
B |
В текущей ячейкеНижеВставить новую ячейку (ниже) |
D, D(Нажмите D дважды) |
Удалить текущую ячейку |
Z |
Отменить удаление (восстановить только что удалённую ячейку) |
X |
Вырезать текущую ячейку |
C |
Копировать текущую ячейку |
V |
Вставить ячейку ниже текущей ячейки |
Shift + V |
Вставить ячейку выше текущей ячейки |
2. Переключение типа ячейки
Ячейки в Jupyter имеют три типа, которые можно переключать в любое время:
| Горячая клавиша | Переключиться на | Назначение |
|---|---|---|
Y |
Code | Писать и запускать код Python |
M |
Markdown (язык разметки) | Написание форматированной документации, заголовков, описаний |
R |
Raw (необработанный текст) | Вывод текста как есть, без выполнения или рендеринга |
1 ~ 6 |
Уровни заголовков Markdown H1 ~ H6 | Быстро установить для ячейки соответствующий уровень заголовка (автоматически переключается в режим Markdown) |
3. Выделение и объединение ячеек
| Горячая клавиша | Функция |
|---|---|
↑ / K |
Выделить ячейку выше |
↓ / J |
Выделить ячейку ниже |
Shift + ↑ / Shift + K |
Выделить несколько ячеек вверх (непрерывно) |
Shift + ↓ / Shift + J |
Выделить несколько ячеек вниз (непрерывно) |
Shift + M |
Объединить выбранные ячейки в одну |
4. Управление выводом и отображением
| Горячая клавиша | Функция |
|---|---|
O |
Свернуть/развернуть вывод текущей ячейки |
Shift + O |
Переключить режим прокрутки для области вывода текущей ячейки (используйте, когда содержимое вывода очень длинное) |
L |
Показать/скрыть номера строк для текущей ячейки |
F |
Найти и заменить текст в ячейке |
5. Операции с ядром и интерфейсом
| Горячая клавиша | Функция |
|---|---|
I, I(Нажмите I дважды) |
Прервать текущую выполняющуюся ячейку (эквивалентно Ctrl+C) |
0, 0(Нажмите 0 дважды) |
Перезапустить ядро (это очистит все выполненные переменные,используйте с осторожностью) |
H |
Открыть панель справки по сочетаниям клавиш (показывает все доступные сочетания клавиш) |
P |
Открыть палитру команд для поиска всех функций Jupyter |
Space |
Прокрутить страницу вниз |
Shift + Space |
Прокрутить страницу вверх |
S / Ctrl + S |
Сохранить ноутбук |
Сочетания клавиш в режиме редактирования (зелёная рамка)
нажмитеEnterПосле входа в режим редактирования вы можете использовать следующие сочетания клавиш для работы внутри ячейки:
1. Редактирование кода
| Горячая клавиша | Функция |
|---|---|
Tab |
Автодополнение кода (введите часть имени функции/переменной, затем нажмите Tab для дополнения) |
Shift + Tab |
Просмотреть описание параметров функции под курсором (всплывает подсказка с документацией; нажмите один раз для краткой справки, дважды — для полной документации) |
Ctrl + / |
Закомментировать/раскомментировать текущую строку или выбранные несколько строк кода |
Ctrl + D |
Удалить всю текущую строку |
Ctrl + Shift + - |
Разделить текущую ячейку на две ячейки в позиции курсора |
Ctrl + Z |
Отменить (восстановить предыдущее изменение) |
Ctrl + Y |
Повторить (отменить отмену) |
Ctrl + A |
Выделить всё содержимое текущей ячейки |
Ctrl + Home |
Перейти в самое начало содержимого ячейки |
Ctrl + End |
Перейти в самый конец содержимого ячейки |
Ctrl + ← / Ctrl + → |
Переместить курсор по словам (быстро перейти к предыдущему/следующему слову) |
2. Вернуться из режима редактирования в режим команд
| Горячая клавиша | Функция |
|---|---|
Esc |
Выйти из режима редактирования, вернуться в режим команд (граница ячейки становится синей) |
Ctrl + M |
То же, что Esc, выйти из режима редактирования |
Магические команды
Магические команды — это специальные встроенные директивы Jupyter, которые начинаются с%(одна строка) или%%(вся ячейка), используется для выполнения общих задач, таких как измерение времени, отладка, файловые операции и т. д.Их можно использовать без установки каких-либо библиотек.。
1. Измерение времени выполнения кода
Пример
%timeit [x**2 for x in range(1000)]
# Пример вывода: 98.3 µs ± 1.2 µs на цикл (среднее ± стандартное отклонение для 7 запусков, по 10000 циклов в каждом)
# %%time: измеряет время выполнения кода всей ячейки один раз (подходит для проверки полных процессов, которые занимают много времени)
%%time
import time
data = [x**2 for x in range(100000)]
time.sleep(1)
# Пример вывода:
# Время ЦП: пользовательское 45.2 ms, системное 8.1 ms, общее: 53.3 ms
# Реальное время: 1.05 s
2. Встроенное отображение графиков
Пример
# Обычно размещается в первой ячейке блокнота; достаточно выполнить один раз для всего блокнота
%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('sine wave')
plt.show()
# %matplotlib notebook: включает интерактивные графики, которые можно масштабировать и панорамировать (но нельзя использовать вместе с inline)
# %matplotlib notebook
3. Просмотр и управление переменными
Пример
%who
# Пример вывода: data plt x
# %whos: подробнее, чем %who, также отображает тип и значение переменных
%whos
# Пример вывода:
# Переменная Тип Данные/Инфо
# ----------------------------
# x ndarray 100: [0. 0.06 ... 6.28]
# data list n=100000
# %reset: очищает все переменные (показывает запрос на подтверждение; подходит при перезапуске вычислений)
%reset
# %reset -f: принудительно очищает все переменные без запроса на подтверждение (-f означает принудительно)
%reset -f
4. Операции с файлами и путями
Пример
%pwd
# Пример вывода: '/home/user/notebooks'
# %ls: перечисляет все файлы в текущем каталоге (пользователям Windows, возможно, потребуется использовать %ls или напрямую использовать !dir)
%ls
# Пример вывода: data.csv model.py notebook.ipynb
# %%writefile: записывает содержимое всей ячейки в указанный файл (обычно используется для быстрого создания файлов скриптов)
%%writefile hello.py
def greet(name):
print(f"Привет, {name}!")
greet("World")
# После выполнения в текущем каталоге создаётся файл hello.py, содержащий код из ячейки
# %run: запускает внешний файл сценария Python и импортирует его переменные в текущее пространство имён
%run hello.py
# Вывод: Hello, world!
# %load: загружает содержимое внешнего файла сценария в текущую ячейку (не выполняет автоматически; только загружает код)
%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: после того как код сообщает об ошибке, запуск %debug в следующей ячейке включает режим интерактивной отладки
# В режиме отладки можно вводить имена переменных для просмотра значений, а ввод q завершает отладку
# Например, после запуска фрагмента кода, вызвавшего ошибку:
%debug
7. Отображение специального содержимого
Пример
%%html
<h3 style="color: steelblue;">Это HTML-заголовок</h3>
<p style="font-size: 16px;">Содержимое HTML можно отображать прямо в Notebook.</p>
# %%latex: отображает содержимое ячейки как формулу 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}) # Отображение дополнительной информации справа от индикатора выполнения
Пример
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, можно использовать встроенные средства IPythonclear_outputдля достижения эффектов динамического обновления:
Пример
import time
total = 50
for i in range(total):
time.sleep(0.1)
# clear_output(wait=True): очищает предыдущий вывод; wait=True означает, что нужно дождаться появления нового содержимого, прежде чем очищать,
# чтобы избежать мерцания. Примечание: это очищает весь вывод текущей ячейки
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 + 1}/50)')
ax.set_xlabel('Шаг')
ax.set_ylabel('Потери')
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.show() # Вызовите show после clear_output, и график обновится в том же месте
time.sleep(0.1)
print("Обучение завершено! Финальные потери:", f"{losses[-1]:.4f}")
Советы по просмотру документации и кода
1. Быстрый просмотр документации функции
Пример
import numpy as np
np.array?
# Это открывает описание параметров и функциональное описание np.array
# Способ 2: добавьте ?? после имени функции, чтобы открыть полную документацию, включая исходный код (если исходный код доступен)
np.array??
# Способ 3: нажмите Shift + Tab внутри круглых скобок функции
# Например, после ввода np.linspace( (внутри круглых скобок) нажмите Shift + Tab, чтобы открыть подсказки по параметрам
# Нажмите Shift + Tab дважды, чтобы отобразить более полную документацию
# Способ 4: используйте функцию help() (вывод более полный, но отображается в области вывода, а не во всплывающем окне)
help(np.array)
2. Используйте display для отображения нескольких результатов вывода
По умолчанию Jupyter отображает только значение последнего выражения в каждой ячейке. С помощьюdisplay()можно вывести несколько результатов в одной ячейке:
Пример
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"
# Каждое выражение в ячейке будет автоматически выводить свой результат
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. Обращение к результату предыдущего вывода
Пример
# _ : Результат вывода предыдущей ячейки
# __ : Результат вывода ячейки, стоящей перед предыдущей
# _3 : Результат вывода 3-й ячейки (Out
# Например:
1 + 1
# Out[1]: 2
_ # Ссылка на предыдущий вывод, значение равно 2
# Out[2]: 2
_ * 10 # Используйте предыдущий вывод для продолжения вычислений
# Out[3]: 20
_3 + 5 # Ссылка на результат 20 из Out
# Out[4]: 25
3. Отображение содержимого с форматированным текстом в Notebook
Пример
# Отобразить текст в формате Markdown
display(Markdown("## Это заголовок\n\n**жирный текст**, *курсивный текст*, `code`"))
# Отобразить HTML
display(HTML("<span style='color:red; font-size:20px'>Большой красный текст</span>"))
# Отобразить сетевое изображение (передайте URL изображения)
display(Image(url="https://www.example.com/images/example-logo.png", width=200))
# Отобразить локальное изображение (передайте путь к локальному файлу)
# display(Image(filename="./chart.png"))
4. Добавьте временные аннотации к ячейкам (автоматически отображать затраченное время в выводе)
Пример
# 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} seconds")
# Использование: оберните любой блок кода с помощью with timer():, и затраченное время будет автоматически выведено после выполнения
with timer("Обработка данных"):
data = [x ** 2 for x in range(1000000)]
# Вывод: ⏱ Обработка данных: 0.087 seconds
5. Быстро просмотреть все сочетания клавиш для текущего Notebook
В командном режиме (синяя рамка) нажмитеH, или через менюСправка → Сочетания клавиш, чтобы открыть полную панель справки по сочетаниям клавиш и в любое время проверить все доступные операции.
Краткая справочная таблица основных сочетаний клавиш
| Действие | Горячая клавиша | Mode |
|---|---|---|
| Выполнить ячейку и перейти к следующей | Shift + Enter |
Общие |
| Выполнить ячейку и остаться на месте | Ctrl + Enter |
Общие |
| Выполнить ячейку и создать новую ниже | Alt + Enter |
Общие |
| Войти в режим редактирования | Enter |
Командный режим |
| Выйти из режима редактирования | Esc |
Режим редактирования |
| Вставить ячейку выше | A |
Командный режим |
| Вставить ячейку ниже | B |
Командный режим |
| Удалить ячейку | D, D |
Командный режим |
| Отменить удаление ячейки | Z |
Командный режим |
| Переключиться на ячейку кода | Y |
Командный режим |
| Переключиться на ячейку Markdown | M |
Командный режим |
| Объединить несколько выбранных ячеек | Shift + M |
Командный режим |
| Прервать ядро (остановить выполнение) | I, I |
Командный режим |
| Перезапустить ядро | 0, 0 |
Командный режим |
| Показать справку по сочетаниям клавиш | H |
Командный режим |
| Автодополнение кода | Tab |
Режим редактирования |
| Просмотреть параметры/документацию функции | Shift + Tab |
Режим редактирования |
| Закомментировать/раскомментировать | Ctrl + / |
Режим редактирования |
| Разделить ячейку в позиции курсора | Ctrl + Shift + - |
Режим редактирования |
| Сохранить ноутбук | S / Ctrl + S |
Режим команд / Режим редактирования |