Мотивация

Вы запускали цикл for и хотели бы добавить больше деталей в код внутри цикла for? Вы можете решить не делать этого, потому что добавление дополнительных деталей означает, что вам нужно остановить прогресс и снова запустить все заново.

Остановка вашего прогресса особенно не идеальна, если код работает часами. Разве не было бы замечательно, если бы вы могли перезагружать тело цикла на каждой итерации без потери состояния, как показано ниже?

В этой статье я покажу вам 2 инструмента для перезагрузки кода или запуска произвольных команд при изменении ваших файлов Python.

Entr - запускать произвольные команды при изменении файлов Python

Как это работает

Entr позволяет запускать произвольные команды при изменении файлов. Чтобы понять, чем может быть полезен entr, представим, что мы хотим создать функцию, которая принимает список чисел и возвращает четные числа.

Мы называем файл выше entr_examples.py. Затем используем pytest, чтобы проверить, возвращает ли функцияget_evens четные числа.

$ pytest entr_examples.py

Тест не пройден, потому что мы еще не добавили код в функцию get_evens. Чтобы попробовать разные способы получения четных чисел, давайте воспользуемся entr для повторного запуска команды pytest entr_examples.py при изменении кода.

$ ls entr_examples.py | entr python entr_examples.py

Прохладный! Используя entr, нам не нужно повторно запускать одну и ту же команду при разработке нашей функции.

Поскольку первый закон разработки через тестирование гласит: Вы не можете писать производственный код, пока не напишите неудачный модульный тест, entr рекомендует разработчикам тестировать различные способы написания кода, пока он работает.

Синтаксис

Ниже приведен общий синтаксис entr:

Обратите внимание: если вы хотите отслеживать сразу несколько файлов Python, используйте ls *.py | entr command_to_runinstead. Это означает, что если какой-либо из отслеживаемых файлов будет изменен, будет выполнен command_to_run.

Установка

Чтобы установить entr в MacOS, введите:

brew install entr

Чтобы установить entr в Ubuntu, введите:

sudo apt-get update
sudo apt-get install entr

Другой вариант - клонировать entr repo и следовать инструкциям по установке.

Перезагрузка - перезагрузка тела цикла без потери его состояния.

Как это работает

Reloading - это библиотека Python, которая позволяет перезагружать тело цикла на каждой итерации без потери его состояния.

Чтобы понять, чем может быть полезна перезагрузка, представьте, что вы пишете цикл Python, который печатает четные числа. Однако во время выполнения цикла вы также хотите, чтобы он печатал нечетные числа без остановки цикла.

Обычно это невозможно сделать в Python. В приведенном ниже коде, несмотря на то, что мы добавляем print(f'{num} is odd') в тело цикла во время выполнения, в выходных данных нет нечетных чисел.

Однако это можно было легко сделать с помощью перезарядки. GIF ниже показывает, как добавление перезагрузки в цикл может иметь значение.

Как мы видим, нечетные числа печатаются после добавления оператора else в тело цикла во время выполнения!

Перезагрузка здесь не особо полезна, поскольку выполнение цикла for не занимает много времени. Но это станет действительно удобно, если вы тренировали модель глубокого обучения в течение нескольких часов и хотите печатать больше статистики за каждую эпоху, не прерывая цикл.

Узнайте, как использовать перезагрузку любимых библиотек здесь.

Синтаксис

Чтобы использовать reloading, просто добавьте его в цикл Python, как показано ниже:

Установка

pip install reloading

Заключение

Поздравляю! Вы только что узнали, как запускать произвольные команды при изменении файлов Python и перезагружать тело цикла Python без потери его состояния. Теперь вы можете не тратить время на выполнение той же команды или повторный запуск цикла, чтобы показать больше результатов.

Не стесняйтесь играть и создавать исходный код этой статьи здесь:



Мне нравится писать об основных концепциях науки о данных и играть с различными алгоритмами и инструментами анализа данных. Вы могли связаться со мной в LinkedIn и Twitter.

Пометьте это репо, если хотите проверить коды всех моих статей. Следуйте за мной на Medium, чтобы быть в курсе моих последних статей по науке о данных, таких как: