Замените print() на ic() и получите +60% эффективности
Вставка
- Опубліковано 12 чер 2024
- ⭐ Курс ООП и Приват канал: www.zproger-school.com/?...
⭐ Телеграм канал: t.me/+Ynu5iTu8DDszNjkx
⭐ Статья с фишками IceCream: t.me/codeblog8/239
⭐ Исходный код из видео: t.me/codeblog8/240
В данном видео мы рассмотрим пакет IceCream, который предоставляет огромное количество фишек для отладки Python кода. Практически любые сценарии, где вы ранее использовали print(), теперь можно заменить через ic().
Более того это дает огромное количество преимуществ, в виде удобства написания кода и его эффективности.
📁 Github: github.com/Zproger
📁 Все плейлисты с уроками: bit.ly/39GaY89
📁 Связаться со мной: zproger777@gmail.com
📁 Поддержать канал: github.com/Zproger/donate
Тайм-коды:
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 в продакшене
Лучший комментарий :DDD
Факт
Настроить линтеры на авто удаление всех print и ic перед автодеплоем, делов то
Настаиваешь логирование и радуешься жизни. Особенно loguru. А нормальный тимлид за такое только похвалит.
Хорошо, что теперь смогу делать больше ошибок
Да, тоже это радует)
а у меня несколько листов выдала эта штуковина, со всякими временными метками и прочей чепухой)))
Баги в багах... Звучит заманчиво
0:13 "...и у вас останется время на создание новых багов..."😂😂😂
Там же написано, что ic на 60% процентов быстрее писать, потому что там букв меньше, а не про эффективность =), но инструмент интересный
К слову о мороженке. Долго искал откуда появились тормоза на сервисе. Так вот, такая штука: ic(len(files)) длилась 1.689812 секунды против 0.000019 сек у print(f'{len(files)=}')
Давно читаю статьи и смотрю Ваши видосики. отличная работа! Молодец! 💪
Благодарю!
Благодарю за отличную работу! Успехов вам!
Вот это ты работу облегчил. Лайк!
Спасибо
Спасибо огромное. Очень нужный инструмент. Я пользуюсь принтом ))
Я пока не смотрел код и слабо представляю как icecream в рантайме получает имена переменных и тем более ключи для обращения к словарю. Либо есть какой-то процессинг исходного файла, либо тут замешана очень чёрная магия с подменой стандартных типов на обёртки, отслеживающие обращения. Если это второй вариант, хотя вряд ли, то это очень плохо.
UPD. Я посмотрел исходники icecream. Оказалось, что он совсем небольшой, и под капотом модуль executing, написанный тем же автором. В свою очередь он завязан на анализе AST и стандартном модуле inspect. Смущает только то, что, как указывает автор, модуль для разбора порядка исполнения и поиска вызовов функций выполняет трюк с модификацией AST. Это приводит к мысли о том, что чёрная магия всё же замешана (=гипотетический баги), и к тому, что это нисколько не быстрый инструмент для времени выполнения (runtime). Эффективный и быстрый он только для программиста во время написания и отладки кода.
Брейкпоинты с условиями обычно всё-таки удобнее, но инструмент полезный, спасибо
а что за брейкпоинты, можно пример?
@@stas7cheэто то что на 1:15 только с условиями
Супер вещь ! А есть возможность показать нумерация строки по умолчанию как если использовать ic без параметров?
Реально полезная фича. Спасибо!
ic| Error: Failed to access the underlying source code for analysis. Was ic() invoked in a REPL (e.g. from the command line), a frozen application (e.g. packaged with PyInstaller), or did the underlying source code change during execution?
[Program finished]
Как это исправить? Не работает на PyDroid3
Привет ZProger, какой у тебя на видео дистрибутив линукса ?
какойто арч
В Idle icecream неккоректно выводит строки(из-за ascl кодов), как можно исправить?
что за редактор кода используешь? не nvim который
И всё-таки ic() хорошая вещь. Пока только небольшие кусочки использую, но уже нравится )
Сам не так давно наткнулся на icecream, часто бывает полезно когда хочешь что-то по-быстрому какие-то значения вывести или отладить код, а логуру использовать лень да и не хочется потом убирать лишние, ic гораздо проще и быстрее(да ещё и вывод достаточно неплохой, чем-то похож на pprint)
Да, мне тоже понравилось :)
Какую IDE Вы используете?
Классная либа, спасибо :)
Какую оболочку используешь? Очень кайфово выглядит
bspwm
Очень похоже на макрос препроцессора в С/С++, который создаёт строку равную внутренностям скобок, а потом выполняет внутренности. С передачей результата пока не сообразил как. А в целом, как я понял, ускорение достигается отказом от использования форматированной строки.
Тоже об этом подумал
Питонисты изобрели макросы в виде гигантской ООП сущности ¯\_(ツ)_/¯
Привет, спасибо за видео, подскажи пожалуйста, это такой vs code для wm или другое ide
Привет, это PyCharm
@@zproger ого, не думал что его так можно темами видоизменить...
@@newalexxx а я всё в IDLE пока пишу, учусь, так правильней будет, где то прочёл что в начале нужно на ней потренироваться, чтобы за меня ничего не подставлял и под "ковром" не пряталось, тоже хочу на PyCharm переходить.
@@mslq бред
@@newalexxx это стандартный новый ui
что у тебя за операционая систрема
Pprint: наконец-то достойный соперник!!
У меня вопрос: что за система и тема?
03:37 Вместо принтов стараюсь юзать логирование, но по большей части мы все юзаем принты так как лень копипастить дефолд настройки дебагера и если у тебя какой-то быстрый алгоритм где даже лишние logging.debug нежелательны, а пилить что-то сложное не охота то тут вспоминаю про C-шные макросы - но это пока влажные мечты 🌚
Или нет? Есть ли дебагеры которые используют макросы и в зависимости от уровня дебага сами закомитят/удалят финальный код который интерпретатор выполнит? (я ведь же про препроцессор сейчас пишу - верно?)
Пока мы говорим о пайтоне, экономия на logging.debug (при условии правильного использования параметров) - это преждевременная оптимизация.
А еще есть вариант с тем чтобы обернуть все в try: except Exception as e:... И читать чего тебе в print(e) напишет.
попытко-ориентированное программированиие?
@@4otkiy_1Cnik пытко-ориентированное
@@4otkiy_1Cnik пытка ориентированное программирование... В трай кеч оборачивают только чужой честно спижженый код, если ты свой код оборачиваешь в трайкеч, можно сделать вывод что ты не понимаешь что ты делаешь... А это хуево... Да и в кетче что то делать нужно, а не просто писать ошибку:) соответственно про файнали я вообще молчу:)
Если честно, вот совсем он не умеет подавать материал. Такое впечатление , что прыгает с одной кочки на другую. Бубу, бубу, бубу, бубу. Трижды пришлось посмотреть ролик. Материал классный. Лайк.
как говорил великий - (х)суета ради (х)суеты
Это вы цитируете Екклесиаста?)
Скажите, что за дистрибутив и оболочка линукс у вас стоит?
i3wm + arch думаю
arch + bspwm и возможно gh0stzk/dotfiles (репо на гитхабе с темами)
upd: Mangeshrex/rxfetch (так же репо на гитхабе лежит, пока что самый похожий wm из того, что видел)
Но обзор фишек loguru или схожих либ?)
спасибо!
Рад помочь :)
Интересно. Установился конечно не сразу, со всякими апгредами и несовместимостями прочими, но заработал, буду посмотреть ))
Странно, у меня с первого раза завелось. Может быть установка производилась глобально?
@@zproger сначала еррор, и предложил свою строчку апгрейда, я её ввёл, и вроде установилась, но не пошла, потом опять я стандартную установку с pip сделал и только потом всё окей.
Просто пишу на плюсах, и если делаю ошибку, то получаю ошибку при компиляции)
неплохо))
Ice cream богом забытый проект..
На заметку, присвоить и вывести интересным образом можно так:
print(a:= doub(10))
потом принты удалять надо будет и код может сломаться.
@@popovanatoliy4736ic тоже надо удалять если че
А есть ссылка на курс ооп со степика?
Нет, так как для всех моих обновлений нужна другая платформа, и степик не позволяет реализовать нужный функционал, поэтому теперь оно размещено на собственной платформе, где нет комиссии и условия лучше чем в stepik.
Есть модуль logging, зачем заниматься всем этим непонятно...
install- инстол, не инсталл. когда all есть, всегда ол читается.
add- эд (добавить)
Благодарю! Хотел сказать инстол, но сомневался правильно это или нет) С произношением пока что не очень у меня.
Logging format не неслышал
Все равно будут на проектах чистить принты и ic
Просто на уровне линтеров. И собсна поэтому айскрим нет смысла использовать
не ну вы попробуйте, результат офигенный, чего то понаписал сейчас буду разбираться.
Тут в целом зависит от задачи
что на счет написания тестов?)
А это уже совсем другая история))
Требую обои, и вобще на то как arch настроили!
А чё за прога, чё за ос, чё так красива?
Дуже класно!)😮🔥 Дякую!!))❤️❤️
Рад что понравилось!
жду видео ролик про arch linux такой-же как у вас
Месяц 3
а может тесты написать?
Курс автора лучше ,чем курс тимура гуева по ооп?
такс... а так можно было 😢 ..спасибо👍😁
Агаа))
Быстрее как фишка во время обучения, чтобы больше понимать что где работает
Так тоже можно юзать :))
iceCrime ютубер такой) игры делает
в данном случае я думаю что название библиотеки это анаграмма на фразу i scream = я кричу, но это не точно))
Разработчики петона улучшают трейсбек с помощью ^^^^^^^^, а люди пишут и используют IC. Отличный гайд по антипаттернам. Ещё больше сущностей вместо вменяемого кода. Скину всем знакомым.
А шо за крышки такие? Хде почитать?
Заведи сущность на ic и будет ещё +1 сущность:)
Посмотрел исходный код этого айскрима, по моему мнению слишком он перегружен - шаблоны, деревья. По мне printf как то проще будет.
брат скажи от души что за ос
Gnu/linux
Пиши код строка за строкой, функцию за функцией и проверяй по ходу написания, проверяй каждый кусок на выхлоп по ходу и ошибки в минусе будут, тупо писать портянку кода а потом проверять как работает через тесты (вагон времени уходит на отладку)
Называется нисходящее программирование. Придумали еще деды, когда дебаггеров не было.
Ты в джаве пока наследников перечислишь забудешь чо хотел сделать...
00:14 Пон 🌚
Хз, мне легче сразу логгирование настроить. И потом меньше работы и при дебаге сразу все видно
просто используйте debug логирование и никакие айскримы ненужны
Нет, в виртуальном окружении нужна ещё одна библиотека с непонятным содержанием и назначением. Ты чего блин.
Зумеры изобрели логгирование)
А если сделать так:
print = ic
ic(“Hello”)
Вроде можно сделать так
Нельзя так, в том и дело. Ругаться будет, что ic не объявлена
Я не хочу, чтобы у меня оставалось больше времени на создание багов😢
raise такой: 🗿
Ничего не понял)
Ммм... Не видел исходники проекта, но выглядит так, будто питонисты изобрели макросы🤔🤔🤔
Ускорение за счёт уменьшения количества букв видимо)). PRINT = 5 букв, а в IC = 2 буквы. Вот и искомые 60% ускорения🤣🤣🤣
У мя второй и третий типы разрабов
чел а ты пробовал не плагиатить видео NeuralNine ?
Какая разница у кого я посмотрел идею? Я не скопировал видео под 0, а добавил моменты и примеры, о которых автор не говорил, добавил собственную статью с примерами, чтобы люди могли прочитать и лучше усвоить материал. Есть много людей, которые посмотрят именно это видео и узнают об icecream, учитывая что технология пользуется спросом.
Поэтому говорить о том, что кто-то плагиатит - это смешно. Люди открывают миллионный по счету супермаркет или миллионный по счету товар, который одного и того же происхождения. Все люди копируют, не бывает оригинала, мы можем лишь преподнести это по-своему. Поэтому вы можете жаловаться на плагиат, а можете вытащить пользу из этого видео, ведь тут совершенно другие примеры и совершенно другая подача.
Аналогично можно предположить, что если кто-то написал книгу или заснял видео о print() и if(), то все последующие видео и книги будут плагиатом источника, ведь примеры и тема точно такие же. Я не пытаюсь этим комментарием как-то вас задеть, я просто хочу открыть глаза на понимание оригинальности, и советовал бы прочитать книгу "кради как художник", она и показывает все эти примеры с "плагиатами", и многие люди смогут понять, что оказывается все копируют, и тут нет ничего плохого.
Вы если умеете ходить, писать, говорить - вы тоже это скопировали если что.
@@zproger Я без негатива на самом деле написал, просто подебнуть)) Не бери в голову.
Ну надоело что нового контента и годных фишек по питону абсолютно нет. Либо до сих пор мусолят юзлес помойки типо пайскрипта, либо снимают базу, либо отбитую шизу.
Сорян если обидел.
Я даже знаю у кого ты это подсмотрел
Чего только не придумают - лишь бы нормальный дебаггер не делать...
log level debug , не?
а для совсем изврата юнит тесты?
а еще не делать больше 2х вложенных if ?
да и в целом наконец научиться разбивать код на короткие функции и называть их по человечески?
и отладчик это все равно не заменит, если научиться его использовать.
не делать больше двух вложенных if🗿🗿🗿
Ага, работал я с таким «грамотным» проектом. Всё по фэншую, функции и классы менее пяти строк. Я задолбался скакать по десяткам и сотням функций в сотнях файлов, чтобы разобраться с логикой работы кода. Уж лучше простыня на десяток тысяч строк, чем такое. Не надо доводить до фанатизма.
В пайтон да, там больше двух вложенных if это ад и израиль, каждый раз отступ надо фигачить = ))
Хорошо хоть elif костыль есть, а то бы вообще жесть была бы.
"Отладка через IDE не есть ошибка.... но есть библиотека IceCream на 300 комитов которая лучше отладчика IDE"😅 Извени, но такого бреда давно не слышал. Любой IDE и его отладчик являются лучшем срадством для отладки, а если это функционала нехватает, та же IDE может предоставить другие инструменты для отладки кода.
+
учитесь использовать отладчик, а не ищите производительность в замене принта
это немного разные инструменты
@@zproger это ОЧЕНЬ разные инструменты. и иногда без дебаговых принтов не обойтись. но по какой-то причине:
1. вы заявляете, что отладчик - убогий и ограниченный инструмент, и его использование чуть ли не ошибка.
2. предлагаете заменить принты на айскрим да так и оставить все в продакшне, потому что очень уж быстрое, видимо
что первое, что второе - в корне не верно. поэтому я и говорю: учитесь использовать отладчик, а не ищите производительность в замене принта
Понимаю, что ролик должен быть длинным, чтобы вываливался в предложу. Но зачем так пытать людей?
Я не делаю видео длинее специально, просто в видео много разных примеров, причем заметьте, что примеры я показываю в отрывках по 10-30 секунд, чтобы вложить побольше информации. Так что ролик вполне мог идти минут 25, если бы я это не делал.
TypeError
тип ошибки: выучить kivy
Замените python на другой язык программирования и получите +600% эффективности (простите)
:D
Сколько заплатили?
5 миллиардов долларов. Ничего мне никто не платил, верить или нет - вам решать)
@@zproger База
'Тттттттттттттэээээээээээ'
Что за бесячий говор. Не смог это смотреть
О чем речь?
Очень тяжело потреблять материал. Чтобы говорить быстро и понятно, надо иметь хорошую речь. Но автор косноязычен, с проблемами с дикцией и кашей во рту, говорит монотонно. Такое слушать - пытка. У меня нет времени смотреть по 2-3 раза, а за 1 просмотр понять тяжко.
Ну и бред автор рассказывает. Видно, что не участвовал в разработке больших проектов
Я дебажу просто добавляя в разные "развилки" console.log(1) console.log(2) и т.п. И потом смотрю что у меня выводится, смотря где у меня такая цифра стоит и разбираю почему так, а не как нужно. Ну и так дебажу часто