Урок курса

Выполнение кода в ноутбуке

Jupyter Notebook с нуля: бесплатный курс

Запуск ячеек: способы и последовательность

Выполнение кода — центральная часть работы с ноутбуком. Рассмотрим несколько способов запуска ячеек и их особенности:

  • Shift+Enter: Выполнить текущую ячейку и перейти к следующей. Если следующей ячейки нет, будет автоматически создана новая снизу. Это самый часто используемый способ, позволяющий быстро пробежать по всему ноутбуку, выполняя ячейку за ячейкой.

  • Ctrl+Enter: Выполнить текущую ячейку и остаться на ней (фокус не переходит дальше). Полезно, если вы хотите несколько раз запустить одну и ту же ячейку.

  • Alt+Enter: Выполнить текущую ячейку и сразу создать под ней новую ячейку (в режиме редактирования). Удобно для быстрого продолжения работы: вы видите вывод только что выполненной ячейки и сразу получаете пустую ячейку для следующего шага.

  • Через меню или кнопку Run: Меню Cell -> Run Cells (или Run Cell and Select Below) делает то же, что Shift+Enter. Кнопка "Run" на панели инструментов по умолчанию эквивалентна Run and Select Below.

  • Выполнить всё подряд: Cell -> Run All запустит все ячейки в порядке сверху вниз. Полезно, чтобы повторно прогнать весь ноутбук, например после исправления кода в начале. Run All Above выполнит от начала до текущей ячейки, Run All Below – от текущей до конца.

При выполнении ячейки рядом с ней появляется номер (как мы видели "In [1]"), а во время выполнения рядом отображается In [*] (звёздочка вместо номера). Это означает, что код ещё выполняется. В это время вы можете отменить выполнение (меню Kernel -> Interrupt или кнопка "Interrupt kernel" – значок остановки). Если код завис или слишком долго выполняется, прерывание выручит.

Порядок выполнения и состояние kernel

Важная особенность Jupyter Notebook: состояние kernel (интерпретатора Python) хранится между запусками ячеек. Если в одной ячейке вы определили переменную, то в другой ячейке (даже находящейся ниже или выше) вы можете к ней обратиться после того, как первая была выполнена. Это позволяет разбивать код на логические блоки. Однако нужно быть осторожным с порядком выполнения.

Например, рассмотрим две ячейки:

  • Ячейка 1:

    x = 10

  • Ячейка 2:

    print(x)

Если вы сначала выполните ячейку 2 (которая печатает x), а затем ячейку 1 (которая присваивает x = 10), то вывод будет таким:

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-2-...> in <module>
----> 1 print(x)
NameError: name 'x' is not defined

Вы получили ошибку, потому что на момент выполнения print(x) переменная x ещё не была определена (мы не запускали ячейку 1 до этого). Затем, выполнив ячейку 1, мы определили x, но вывод уже не пересчитался автоматически.

Если теперь снова выполнить ячейку 2 (print(x)), ошибок не будет, и вы увидите 10. Этот пример показывает: ячейки можно выполнять в произвольном порядке, но смысл имеет только тот порядок, в котором вы их запускали, а не расположение сверху вниз. Поэтому рекомендуется:

  • В начале работы запускать ячейки последовательно, сверху вниз, чтобы все переменные были определены.

  • Если вы запускали код вне порядка (например, вернулись и изменили что-то вверху), стоит воспользоваться Restart & Run All для чистоты эксперимента.

  • Обращать внимание на номера [ ]: если вдруг нижняя ячейка имеет номер выполнения меньше, чем верхняя, значит, вы выполнили её раньше.

Kernel — это "сердце" ноутбука. В меню Kernel доступны действия:

  • Interrupt (Прервать): остановить выполнение текущей операции (как Ctrl+C в терминале).

  • Restart (Перезапустить): полностью перезапустить интерпретатор Python. Все переменные, функции и модули забудутся, память очистится. Полезно, если вы хотите начать выполнение "с чистого листа" без перезапуска всего Jupyter.

  • Restart & Run All: сочетает перезапуск kernel и запуск всех ячеек подряд. Очень полезно, чтобы убедиться, что ваш ноутбук может выполняться с нуля без ошибок в правильном порядке (например, перед отправкой кому-то).

Вывод результатов и работа с выводом

Когда вы выполняете ячейку кода, Jupyter Notebook отображает вывод под этой ячейкой. Вывод может быть разного вида:

  • Текстовый вывод: результат работы программы в текстовой форме. Например, вызов print() выводит указанный текст, ошибки отображаются текстовым traceback. Вывод может быть многострочным.

  • Графический вывод: если код генерирует график (через Matplotlib) или изображение, оно будет показано прямо в ноутбуке (например, под ячейкой появится графическое окно).

  • Табличный вывод: объекты типа pandas.DataFrame и аналогичные отображаются как отформатированные таблицы (HTML-таблица) с заголовками столбцов, что удобно для просмотра данных.

  • “Богатый” вывод: ноутбук поддерживает вывод сложных объектов – можно отображать HTML-код, формулы, аудио, видео и интерактивные виджеты (о них позже). Это достигается с помощью специальных функций (например, из модуля IPython.display).

Особенности механизма вывода:

  • Если ячейка заканчивается каким-либо выражением (и это последняя строка ячейки, не присвоенная переменной), Jupyter автоматически выведет результат вычисления этого выражения. Например, ячейка:

    2 + 2

    после выполнения покажет под собой 4 – результат последнего выражения. Это поведение аналогично интерактивной оболочке IPython.

  • Если в ячейке несколько команд вывода или выражений, действуют правила:

    • Print: Каждый вызов print() отобразит свой текст на новой строке в порядке выполнения.

    • Автовывод последнего выражения: Только последнее неприсвоенное выражение в ячейке будет автоматически выведено. Например:

      2 + 2

    • 3 + 3

      при выполнении выведет только 6 (результат 3+3), а результат 2+2 не появится, потому что он не последний. Чтобы увидеть оба, нужно оба вывести через print() или объединить в одну структуру.

  • Выводы могут сочетаться: например, вы можете получить текстовый вывод (через print) и затем график. Они отобразятся один за другим под ячейкой.

Jupyter сохраняет вывод вместе с ноутбуком. Если вы сохраните ноутбук и закроете его, а потом откроете снова, под ячейками вы увидите старый вывод (тот, что был при последнем выполнении). Учтите, что этот вывод может быть неактуальным, если код или данные изменились и вы ещё раз не запускали ячейку. Поэтому часто полезно обновить вывод, перезапустив необходимые ячейки или весь ноутбук.

Вы можете очистить выводы (например, перед передачей ноутбука кому-то) через меню: Cell -> All Output -> Clear – это уберёт все текущие отображённые результаты, но код останется. При следующем выполнении они появятся заново.

Ограничение вывода: Если программа выводит очень большой объём текста или данных, Jupyter может замедлиться. Поэтому:

  • Большие тексты (сотни строк) автоматически сворачиваются в прокручиваемый блок, чтобы не занимать всю страницу.

  • Огромные таблицы (например, DataFrame с тысячами строк) тоже отображаются с прокруткой или усечённо (первые и последние несколько строк).

  • Постарайтесь избегать чрезмерного вывода – например, вместо вывода всей таблицы, посмотрите её размеры df.shape и первые строки df.head().

Попробуйте решить

Расположите действия для «создать новую Markdown‑ячейку ниже текущей» в правильной последовательности:

Продолжить с проверкой и прогрессом

Откройте интерактивный раннер с заданиями урока.

Перейти к интерактивному уроку