Замените print() на ic() и получите +60% эффективности

preview_player
Показать описание

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

Более того это дает огромное количество преимуществ, в виде удобства написания кода и его эффективности.

Тайм-коды:
0:00 - Почему IceCream заслуживает внимания?
1:00 - 3 Проблемы обычного подхода
3:40 - Установка IceCream и решение ошибок выше
5:40 - Удобное отключение ic() в определенных зонах
6:14 - IceCream это замена logging и loguru?
8:39 - Красивое и удобное форматирование в IceCream
9:40 - Как работают префиксы IceCream?
10:01 - Добавляем ic() внутрь условий без изменения логики
10:36 - Как сделать динамический префикс?
11:02 - Обрабатываем типы и значения в IceCream
11:23 - Автоматическая установка IceCream во все модули
11:45 - Решаем проблемы с отслеживанием вложенных условий
Рекомендации по теме
Комментарии
Автор

От тимлида отхватишь за print'ы и ic в продакшене

YanchikDev
Автор

0:13 "...и у вас останется время на создание новых багов..."😂😂😂

Mertvyy_chel
Автор

Хорошо, что теперь смогу делать больше ошибок

Ерёмакрутой
Автор

Там же написано, что ic на 60% процентов быстрее писать, потому что там букв меньше, а не про эффективность =), но инструмент интересный

maximmihailov
Автор

К слову о мороженке. Долго искал откуда появились тормоза на сервисе. Так вот, такая штука: ic(len(files)) длилась 1.689812 секунды против 0.000019 сек у print(f'{len(files)=}')

AlexanderDev
Автор

Я пока не смотрел код и слабо представляю как icecream в рантайме получает имена переменных и тем более ключи для обращения к словарю. Либо есть какой-то процессинг исходного файла, либо тут замешана очень чёрная магия с подменой стандартных типов на обёртки, отслеживающие обращения. Если это второй вариант, хотя вряд ли, то это очень плохо.
UPD. Я посмотрел исходники icecream. Оказалось, что он совсем небольшой, и под капотом модуль executing, написанный тем же автором. В свою очередь он завязан на анализе AST и стандартном модуле inspect. Смущает только то, что, как указывает автор, модуль для разбора порядка исполнения и поиска вызовов функций выполняет трюк с модификацией AST. Это приводит к мысли о том, что чёрная магия всё же замешана (=гипотетический баги), и к тому, что это нисколько не быстрый инструмент для времени выполнения (runtime). Эффективный и быстрый он только для программиста во время написания и отладки кода.

brinza
Автор

Брейкпоинты с условиями обычно всё-таки удобнее, но инструмент полезный, спасибо

stepanyk
Автор

Давно читаю статьи и смотрю Ваши видосики. отличная работа! Молодец! 💪

chubinmax
Автор

Благодарю за отличную работу! Успехов вам!

denissavast
Автор

Сам не так давно наткнулся на icecream, часто бывает полезно когда хочешь что-то по-быстрому какие-то значения вывести или отладить код, а логуру использовать лень да и не хочется потом убирать лишние, ic гораздо проще и быстрее(да ещё и вывод достаточно неплохой, чем-то похож на pprint)

semmes
Автор

Если честно, вот совсем он не умеет подавать материал. Такое впечатление, что прыгает с одной кочки на другую. Бубу, бубу, бубу, бубу. Трижды пришлось посмотреть ролик. Материал классный. Лайк.

user_-Vovchik
Автор

Привет ZProger, какой у тебя на видео дистрибутив линукса ?

frumo
Автор

как говорил великий - (х)суета ради (х)суеты

ezirl
Автор

Спасибо огромное. Очень нужный инструмент. Я пользуюсь принтом ))

sokhibimamov
Автор

А еще есть вариант с тем чтобы обернуть все в try: except Exception as e:... И читать чего тебе в print(e) напишет.

GhsTG
Автор

Супер вещь ! А есть возможность показать нумерация строки по умолчанию как если использовать ic без параметров?

Human-denf
Автор

Pprint: наконец-то достойный соперник!!

diobrando
Автор

В Idle icecream неккоректно выводит строки(из-за ascl кодов), как можно исправить?

_gamerio
Автор

просто используйте debug логирование и никакие айскримы ненужны

MrSmallChe
Автор

Просто пишу на плюсах, и если делаю ошибку, то получаю ошибку при компиляции)

Michaelius