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: многократно измеряет время выполнения одной строки и берёт среднее для более точного результата (подходит для проверки производительности коротких выражений)
%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: встраивает графики непосредственно в 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('sine wave')
plt.show()

# %matplotlib notebook: включает интерактивные графики, которые можно масштабировать и панорамировать (но нельзя использовать вместе с inline)
# %matplotlib notebook

3. Просмотр и управление переменными

Пример

# %who: выводит список всех определённых имён переменных в текущем пространстве имён
%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: отображает текущий рабочий каталог (вывод рабочего каталога)
%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: просмотр истории всех команд, выполненных в текущем сеансе
%history
# Добавление -n отображает номера строк; добавление -l 5 показывает только 5 последних записей
%history -n -l 5

# %debug: после того как код сообщает об ошибке, запуск %debug в следующей ячейке включает режим интерактивной отладки
# В режиме отладки можно вводить имена переменных для просмотра значений, а ввод q завершает отладку
# Например, после запуска фрагмента кода, вызвавшего ошибку:
%debug

7. Отображение специального содержимого

Пример

# %%html: отображает содержимое ячейки как вывод HTML (можно встраивать пользовательские стили и интерактивные элементы)
%%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

Пример

from tqdm.notebook import tqdm   # Используйте версию для notebook в Jupyter для более привлекательного отображения
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})  # Отображение дополнительной информации справа от индикатора выполнения

Пример

# Интеграция tqdm с Pandas: отображение прогресса для операций apply в DataFrame
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для достижения эффектов динамического обновления:

Пример

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 означает, что нужно дождаться появления нового содержимого, прежде чем очищать,
    # чтобы избежать мерцания. Примечание: это очищает весь вывод текущей ячейки
    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 + 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. Быстрый просмотр документации функции

Пример

# Способ 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()можно вывести несколько результатов в одной ячейке:

Пример

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"
                                                    # Каждое выражение в ячейке будет автоматически выводить свой результат
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 есть встроенные специальные переменные для быстрого обращения к предыдущим выводам:
# _ : Результат вывода предыдущей ячейки
# __ : Результат вывода ячейки, стоящей перед предыдущей
# _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

Пример

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

# Отобразить текст в формате 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. Добавьте временные аннотации к ячейкам (автоматически отображать затраченное время в выводе)

Пример

# Установка 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} seconds")

# Использование: оберните любой блок кода с помощью with timer():, и затраченное время будет автоматически выведено после выполнения
with timer("Обработка данных"):
    data = [x ** 2 for x in range(1000000)]
# Вывод: &#x23f1; Обработка данных: 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 Режим команд / Режим редактирования
Другие расширения