Потому что печать в консоли предназначена не только для грубой отладки!

Когда вы программируете, у вас будут ошибки. Это не потому, что вы плохой разработчик или потому, что недостаточно разбираетесь в коде; это просто естественный шаг для любого творческого процесса - по ходу будут икоты. На самом деле, исходя из моего опыта, программирование - это бесконечная цепочка загадок, каждая из которых представляет собой вариацию на тему: «Как мне исправить эту новую ошибку, которую я только что представил?».

Теперь решение этих проблем отнюдь не простая задача, и есть несколько способов сделать это. Разработчики высокого уровня погружаются в отладчики (такие как знаменитый gdb [Gnu DeBugger] для C или его Python-эквивалент pdb) или готовят серию модульных тестов, которые помогают разграничить периметр поиска для этого конкретная проблема. Это мощные инструменты, необходимые для производства.

С другой стороны, давайте будем честными: многие ли из нас действительно используют их в повседневной жизни кодирования? Отладчики - чрезвычайно интересные инструменты, но вам нужно помнить о новом наборе команд и ярлыков ... размещение правильных отпечатков в нужном месте может так же легко показать вам, какие пути проходит ваш код во время его выполнения. Это безболезненный способ заставить ваш код говорить и рассказывать вам о его жизни. Но! Это нужно делать правильно, чтобы не завалить нечитабельными данными.

А если вы улучшите внешний вид своих отпечатков, это может быть даже полезно для конечного пользователя вашего приложения! Подумайте обо всех этих установщиках, таких как CMake, NPM или Yarn, которые просто заполняют вашу оболочку красивыми значками и яркими цветами, когда вы куда-то добавляете пакет ...

Мы больше не живем в каменном веке - наши терминалы могут делать довольно удивительные вещи с ограниченными накладными расходами: так что вот несколько примеров привлекательных функций для улучшения печати ваших консолей Python!

Цветная печать с цветовыми кодами ANSI

Вы когда-нибудь задумывались, как эти инструменты могут повсюду ставить красные кресты и зеленые галочки? Как они могут отображать информационные журналы синим цветом, а предупреждения - желтым?

Escape-коды ANSI - это особая последовательность символов, которая является кроссплатформенной и может быть встроена в ваши строки для изменения их внешнего вида. Эти последовательности не просто выводятся на консоль, а интерпретируются оболочкой для изменения шрифта или цвета фона, изменения стиля шрифта, перемещения курсора в терминале и т. Д.

Я собираюсь сосредоточиться на escape-кодах ANSI цветов в этом руководстве. Вот краткий пример того, как использовать эти цветовые коды, чтобы напечатать ваше сообщение в консоли каким-либо цветом! Я просто определяю очень простой класс (который я использую как перечисление в стиле C), а затем вызываю различные цвета в моем операторе печати:

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

И, как я упоминал ранее, цветовые коды ANSI могут даже изменить цвет фона или стиль шрифта!

Чтобы объединить два или более преобразований, просто распечатайте escape-коды один за другим (хотя вам понадобится только один сброс). А для более подробного списка возможных цветовых кодов ANSI, написанных в формате Python, вы можете проверить этот фрагмент Github.

Итак, вы готовы вдохнуть жизнь в свой терминал? ;)

Создание хороших индикаторов выполнения с помощью модуля tqdm

Индикаторы выполнения - это очень удобный способ показать развитие некоторых выполняемых задач. Это может быть связано с фундаментальным правилом UI / UX: вы всегда должны давать отзывы своим пользователям, чтобы они знали, когда что-то происходит. Это особенно важно, когда пользователь только что выполнил действие в вашем приложении - вы должны сказать ему, что действие было учтено и что существует непрерывный процесс, чтобы он не повторял его снова и снова. В некоторых случаях для пользователей даже «обнадеживает» то, что они видят, что действие требует времени, потому что чем дольше оно занимает, тем важнее его значение.

Конечно, Python может печатать индикаторы выполнения изначально, просто добавляя символы в стандартный поток вывода и используя возврат каретки (символ \r). Однако модуль tqdm - действительно приятная ступенька. Как вы можете видеть в этой небольшой демонстрации, которую я сделал, вы просто завершаете итерацию (например, базовый диапазон или список) с помощью метода tqdm, и он автоматически показывает:

  • Линия блоков, которая медленно заполняется
  • текущая итерация и общее количество итераций, если известно
  • время, уже потраченное на это перечисление, и прогноз оставшегося времени
  • «скорость» перечисления, т.е. время, затрачиваемое на каждую итерацию

Вы можете использовать параметр bar_format, чтобы указать, что вы хотите показать, выбрать color, который вы предпочитаете, или даже использовать прямую интеграцию с первоклассными модулями, такими как Keras, Dask или Pandas. Большим преимуществом этой библиотеки является то, что она имеет очень небольшие накладные расходы (по словам авторов), а это означает, что она не замедлит ваши фактические вычисления, просто чтобы отобразить их более красиво :)

Добавление красивых иконок 🚀

В последние несколько лет размещение значков повсюду становится все более и более нормой. Иконки небольшие, но (при правильном дизайне) они передают четкое и ясное значение. Важно помнить, что это значение гораздо более неявно, чем в тексте - это скорее тонкий договор между вами и пользователем о том, что вы говорите на одном языке и что для вас обоих происходит передача чтобы означать настройки, маленький кружок на треугольнике будет означать пользователь и т. д. И так же, как есть словари, чтобы дать вам определение слов, теперь есть онлайн-энциклопедии, чтобы научить вас значению смайликов и иконы.

Из-за чрезмерного представления значков и смайликов в приложениях, мобильных пользовательских интерфейсах, информационных бюллетенях или текстовых сообщениях этот новый язык постепенно вошел в мейнстрим популярной культуры и даже используется в рекламных кампаниях или в качестве центральной темы фильмов. Есть даже статьи, которые помогут выбрать лучший смайлик для следующей рекламы.

Все это говорит о том, что иконы здесь и сейчас. Нет смысла это отрицать. Скорее, давайте добавим немного к нашим принтам точно так же, как установщик Yarn (см. Видео в начале этой статьи) 🛠

Самый естественный способ разместить значки на ваших отпечатках Python - использовать их значение в Юникоде. Unicode - это стандарт, который расширил и существенно заменил ASCII в большинстве современных приложений и определил весь набор символов, доступных на компьютерах. Он содержит намного больше возможностей, чем ASCII, и, в частности, позволяет людям писать все существующие в настоящее время алфавиты (латынь, кириллица, арабский язык и т. Д.), А с 2010 года - смайлы!

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

Примечание: как описано в этой статье, вы также можете использовать краткое имя CLDR для значков или пакета emoji.

Разные советы и хитрости

  • В Python 3 произошло критическое изменение с print: оператор print стал print() функцией. Для большинства из нас это означало только то, что теперь вы были вынуждены заключать в скобки то, что печатали. Но на самом деле он также позволяет передавать дополнительные аргументы ключевого слова, среди которых end аргумент. Это позволяет вам определить, какой символ будет выводиться в конце вашей печати: по умолчанию это новая строка, но вы можете выбрать пустую строку или пробел, если хотите, чтобы все ваши результаты выводились в одной строке, например .
  • Вы можете очень легко получить автоматический отступ для уровней рекурсии в ваших отпечатках, добавив переменную level / indent в ваши вызовы и добавив к выходным префиксам это количество пробелов или табуляций. Помните, что строки можно умножать на целые числа, если вы хотите повторить их несколько раз:

  • Я действительно рекомендую вам ознакомиться с этой шпаргалкой по форматированию строк в Python: от выравнивания по левому / правому краю до заполнения определенной длины и внедрения переменных, эта страница суммирует все, что вы можете сделать со старым '% -style formatting 'или новый метод format() (и, начиная с Python 3.6+, f-строки)

А вы? У вас есть какие-нибудь приемы печати на Python, которыми можно поделиться? :)

Если вам понравилась эта статья, вы можете найти больше сообщений в блоге о технологиях, искусственном интеллекте и программировании на моем сайте :)