Python Academy — один канал вместо тысячи учебников Чат канала: @python_academy_chat Сотрудничество: @zubar89 Канал включён в перечень РКН: https://rkn.link/TVu
Познакомьтесь с IceCream: Улучшенным выводом в Python
Hедавно мы наткнулись на потрясающий инструмент для отладки и разработки в Python
, и хотим поделиться им с вами! Представляем вам icecream
- библиотеку, которая упрощает отладку, улучшая вывод ваших данных.
Что такое icecream
?icecream
- это легковесная библиотека для Python
, которая предоставляет простые, но мощные инструменты для отслеживания и вывода значений переменных и данных в процессе выполнения кода. Этот инструмент полезен при отладке, тестировании и разработке, помогая вам лучше понять, что происходит в вашей программе.
Преимущества icecream
перед стандартным print
:
1. Читабельность и простота в использовании: icecream
автоматически выводит имя переменной и ее значение, что делает вывод более понятным и читабельным.
2. Цветовая кодировка: icecream
поддерживает цветовую кодировку вывода, что делает его более наглядным и удобным для анализа.
Настройка icecream
:icecream
позволяет настраивать вывод, добавлять дополнительную информацию, и даже сохранять логи в файл. Вы можете настроить icecream
в соответствии с вашими потребностями, делая вывод более информативным и удобным.from icecream import ic, install
install(autodetect=True, includeContext=True)
number = 42
ic(number)
text = "Привет, мир!"
ic(text)
Это добавит контекст, такой как имя файла и номер строки, в вывод:ic| <ipython-input-1-5a0d5d83d2d3>:1 in <module> - number: 42
ic| <ipython-input-1-5a0d5d83d2d3>:4 in <module> - text: 'Привет, мир!'
Автор идеи поста: @hexvel
Если у вас есть предложения для следующего поста, делитесь в комментариях!
#Python #logging #icecream
Wget
Наверняка вам не раз приходилось писать методы для какой-то специфической работы с вебом. Но я вас огорчу – вы делали это зря. Ведь уже есть wget. Рекурсивно скачать сайт? Забрать со страницы все изображения? Для wget это не проблема.
Команда МТС Web Services приглашает тебя послушать топовые доклады от ведущих инженеров команды, а потом обсудить услышанное в неформальной обстановке. Приходи, будет интересно!
Когда: 6 декабря, 18:00
Где: площадка «Бетон», Кальварийская ул., 17, г. Минск
Что в программе:
— Расскажем, как строим новое облако с нуля в 2024-м
— Поговорим о разработке IAM в облаке
— Обсудим, как создать Development Platform
— Разберёмся, что такое реконсиляция и почему она важна для облачной инфраструктуры
Присоединяйся.
Заглушка в коде
В ходе исполнения оператора pass
ничего не происходит, поэтому он может использоваться в качестве некой заглушки в тех местах, где это синтаксически необходимо.
Например, вам надо сделать несколько функций, вы написали def'ы
и названия, но сам код еще не успели, однако программу надо запустить и проверить что-то другое. Вот тут и понадобится pass
.
Или в конструкции try-except
, чтобы просто проигнорировать и никак не обрабатывать ошибку в программе.
#pass
ИИ в работе страховых компаний
В «Ингоссрахе» рассказали, в каких конкретно рабочих процессах применяют нейросети на сегодняшний день. На основе machine learning строятся прогнозы убытков, наступления страховых случаев и мошеннических операций. Обучаемые риск-модели показывают, какие клиенты и насколько убыточны в зависимости от пола, возраста и приобретаемых продуктов страхования. Для автоматизации работы и для решения нестандартных задач применяются Computer Vision (CV), Optical Character Recognition (OCR) и Natural Language Processing (NLP). И ущерб от ДТП теперь рассчитывают нейросети по фотографиям с места происшествия.
Второе направление, в котором работу без ИИ уже невозможно представить, это формирование персонифицированных предложений для клиентов. Методами CRM-моделирования оценивается лояльность клиентов, рассчитывается индивидуальный оффер и строится прогноз покупки страховых продуктов. Личные данные клиентов при этом охраняются всеми доступными способами: деперсонализация, хеширование, физическая защита серверов.
Порядок разрешения методов
В Python существует так называемый Method Resolution Order (MRO), или порядок разрешения методов в классе. Всё, что вам нужно знать – это порядок, в котором Python ищет нужный атрибут или метод.
Этот порядок можно получить при помощи атрибута __mro__
. Он говорит о том, что если мы в примере выше попробуем обратиться к атрибуту value
, Python будет искать сначала в классе A
, далее в B
, затем в C
и в самом конце в object
.
Отсюда становится понятно, что артибут первее будет найден именно в классе B и равен он будет значению 1.
#классы
Хэширование
Хэш — это целое число фиксированного размера, которое идентифицирует определенное значение. Каждое уникальное значение должно иметь свой собственный хэш.
Для хэширования значений есть встроенная функция hash()
. Используется она в основном для сравнения значений разных объектов — сравнивать хэши легче и выгоднее.
Но изменяемые объекты по типу списков и словарей нельзя хэшировать — интерпретатор выбросит соответствующую ошибку.
Здесь, кстати, есть две пасхалки. Хэш бесконечности равен перым цифрам числа Пи, а хэш Not a Number равен нулю.
А еще случаются коллизии: например, хэши чисел -1 и -2 одинаковы.
#hash
Устроиться аналитиком в Яндекс за выходные
7–8 декабря проводим Weekend Offer Analytics. До 4 декабря оставьте заявку на участие, 7 декабря пройдите технические собеседования, а 8 декабря познакомьтесь с командами и получите офер.
В мероприятии участвует 7 команд: Crowd, Карты, Поиск, YaGPT 2, Автономный транспорт, Реклама и Ecom-сценарии. Вы сможете пообщаться с менеджерами и выбрать проект, который покажется самым интересным.
Нанимаем в офисы России и Республики Беларусь.
Узнать подробности и зарегистрироваться можно здесь.
Временные файлы
В стандартной библиотеке Python есть модуль tempfile
, который содержит классы и методы для корректной работы со временными файлами и директориями.
Функция TemporaryFile
создает временный файл в системной директории и возвращает файлоподобный объект.
Созданный временный файл будет автоматически удален по закрытию файла или при выходе из контекстного менеджера.
Также другие процессы и приложения не смогут получить доступ к этому временному файлу.
#tempfile
Not a Number
В модуле math
есть особый объект, который называется NaN
(Not a Number).
Эти объекты NaN
не уникальны, и даже не равны самим себе, так что вы можете иметь несколько подобных объектов, взятых из нескольких разных источников.
Например можно создать подобный объект, просто передав строку 'nan'
во float
. Кстати говоря, это значит что вы можете использовать NaN
в качестве ключа в словаре (хотя мы и не советуем это делать).
#nan #tips
Важное про цифры и Юникод
0, 1, 2, 3, 4, 5, 6, 7, 8, 9 — не единственные символы, которые считаются цифрами. Python следует правилам Юникода и обрабатывает несколько сотен символов как цифры. Полный список находится здесь.
Это крайне важно знать, потому что эти символы влияют на такие функции, как int
, unicode.isdecimal
и даже re.match
.
Думаю, в один момент это знание сэкономит вам время на исправление "бага" с такими странными символами. Предупрежден — значит вооружен.
#числа #юникод
В Центральном университете начался набор на программу бакалавриата 2025 года.
Для будущих студентов вуза стартовал конкурс на получение грантов. Ими можно будет оплатить до 100% обучения. Принять участие могут старшеклассники и учащиеся старших курсов колледжей. Проходить конкурс будет ежемесячно до августа 2025 года.
Конкурс проводится в онлайн и офлайн-форматах и состоит из двух этапов. Базовые знания математики, логики и аналитического мышления проверяются онлайн, а в бизнес-игре оцениваются гибкие навыки, в том числе мотивация, коммуникативные и лидерские качества.
В рамках набора абитуриенты поучаствуют в собственных мероприятиях Центрального университета - ИТ-буткемпах и хакатонах, где смогут проявить полученные знания и навыки. Для лучшего понимания возможного карьерного пути состоятся экскурсии в офисы ведущих высокотехнологичных компаний России, например, Т-Банк, VK и Авито.
Ruff Ruff
— Чрезвычайно быстрый линтер и форматер кода на Python
, написанный на Rust
.
Основным преимуществом Ruff
является его скорость. Ruff
в 10-100 раз быстрее аналогов. В сравнении с flake8
, автор заявляет о практически полном совпадении с набором правил инструмента и нативной реализацией популярных плагинов (flake8-bugbear
и т.д.). Также Ruff
совместим с Black
«из коробки».Ruff
может форматировать код. Например, он автоматически удаляет неиспользуемые импорты. Что касается сортировки и группировки строк импорта, то она практически идентична isort
.
#python #ruff
Прогресс выполнения программы
Индикаторы прогресса добавляют наглядности в скриптах, которые исполняют какие-то функции, требующие времени для выполнения. Модуль tqdm
является простым и лаконичным вариантом.
Привычный range
можно заменить на trange
для визуализации прогресса. А для итерации по какой-либо последовательности, достаточно просто передать её в функцию tqdm
. Также модуль хорошо себя зарекомендовал и в Jupyter Notebook.
Кстати, интересный факт – название tqdm
произошло от арабского слова "taqaddum" (تقدّم), которое означает "прогресс," а также это ещё и сокращение от "я тебя сильно люблю" на испанском (te quiero demasiado).
#модули #tqdm
Порядок разрешения методов
В Python существует так называемый Method Resolution Order (MRO), или порядок разрешения методов в классе. Всё, что вам нужно знать – это порядок, в котором Python ищет нужный атрибут или метод.
Этот порядок можно получить при помощи атрибута __mro__
. Он говорит о том, что если мы в примере выше попробуем обратиться к атрибуту value
, Python будет искать сначала в классе A
, далее в B
, затем в C
и в самом конце в object
.
Отсюда становится понятно, что артибут первее будет найден именно в классе B и равен он будет значению 1.
#классы
Где брать опыт кодинга, если вы школьник
Прокачаться в программировании и развить нестандартное мышление можно на интеллектуальных соревнованиях. Это всегда хороший буст для образовательного трека.
Например, олимпиада по программированию «Технокубок» от VK Education предлагает задания от тренеров ICPC, закрытое комьюнити и ивенты от VK, а также главный приз — поступление в вуз без экзаменов. Уже 8 декабря пройдёт второй отборочный раунд.
#lдля_начинающих
Метод sets.issubset()
Метод sets.issubset() позволяет проверить находится ли каждый элемент множества sets в последовательности other. Метод возвращает True, если множество sets является подмножеством итерируемого объекта other, если нет, то вернет False.
Синтаксис:
sets.issubset(other).
Скачиваем вебсайты целиком
Максимально простой, но при этом мощный пакет pywebcopy
поможет вам клонировать отдельные веб-страницы или даже целые сайты.
Функция save_webpage
скачивает страницу по указанной ссылке, в аргументы также можно передать путь, куда сохранить результат.
А вот save_website
дает возможность скачать целый вебсайт рекурсивно. Например, если сайт представляет из себя блог, то скрипт скачет все статьи, которые есть на сайте.
Но здесь надо быть аккуратнее, подобная рекурсивная загрузка отправит много запросов к серверу и может сильно нагрузить его, если на сайте много страниц.
#pywebcopy
ООП: композиция
Композиция — это отношение, при котором объекты одного класса связаны с объектами другого. Такой способ организации взаимодействия между классами также называется ассоциацией.
Как правило, в этом случае объект одного из классов (в примере выше это Salary
) является полем другого (Employee
). Сложного здесь, как вы видите, ничего нет.
Ассоциированные объекты зачастую могут циклически ссылаться друг на друга, что ломает стандартный механизм сборки мусора.
В таком случае необходимо использовать слабые ссылки из модуля weakref
, о котором поговорим позже.
#классы #ооп
Находим опечатки в тексте
Полезный пакет spellchecker
позволяет находить опечатки в тексте и даже дает возможные варианты исправлений.
Под капотом модуль использует алгоритм расстояния Левенштейна. А сам код основан на статье, написанной в блоге Питера Норвига. Короче, реализация интересная, советую поизучать.
Но даже если не вникать в подробности, то пакет использовать крайне легко. Примеры использования класса SpellChecker
и его методов correction
и candidates
показаны на картинке.
Пакет поддерживает 6 языков, включая русский. Но за подробностями отправляю вас читать документацию.
#spellchecker
Как менялась разработка на Python и что нас ждёт дальше
📆 19 декабря собираем предновогодний митап от Яндекса, чтобы подвести итоги 2024 года.
Вспомним об интересных новостях, связанных с языком:
🔸 Обсудим Python 3.12, о котором говорили в прошлом году, и подумаем, какие ожидания оправдались, а какие нет
🔸 Посмотрим на версию 3.13, Faster CPython, jit и nogil
А ещё поговорим о трендах в архитектуре и развитии бэкенд-разработчика на круглом столе с экспертами:
🔸 Николаем Хитровым, тимлидом в Точке
🔸 Евгением Афонасьевым, тимлидом из Авито
🔸 Никитой Соболевым, опенсорс-разработчиком
🔸 Сергеем Яхницким, техлидом в Техплатформе
🔸 Александром Букиным, основателем Pytup
⏭️ Регистрируйтесь на встречу в Москве или подключайтесь к трансляции, где бы вы ни были.
Удобная работа с файловыми путями
В стандартной библиотеке есть максимально удобный пакет pathlib
, позволяющий осуществлять различную работу с файловыми путями.
Для представления пути к файлу есть класс Path
, с объектами которого уже можно производить операции. Например, методы exists()
и is_dir()
проверяют, существует ли файл и является ли он директорией.
Но самой классной фичей является замена os.path.join()
на более удобный и элегантный вариант с использованием слэшей, как показано на картинке.
Таким образом, пакет pathlib
может стать частичной заменой os
в некоторых случаях при работе с файловыми путями.
#pathlib
Операторы множеств
Множество — это коллекция, где все элементы уникальны. То есть одно и то же значение не может повторяться дважды.
Помимо обычных методов, у множеств реализована поддержка различных операторов: объединение, пересечение, симметрическая разность, обычная разность и некоторые другие.
Примеры этих операторов можете посмотреть выше на картинке. Реализовано подобное поведение с помощью магических методов, про которые уже не раз говорили на канале.
#множества
Отлавливаем ошибки с помощью assert
Инструкция assert
принимает логическое выражение и необязательное сообщение. Она используется для проверки типов, значений аргумента и вывода функции, а также для отладки, поскольку останавливает программу в случае ошибки.
Если выполнить инструкцию assert
с логическим выражением, результат которого равен True
, ничего не произойдет. Но в случае с False
будет сгенерировано исключение AssertionError
.
Однако не нужно пытаться обработать исключение AssertionError
блоком try-except
. В таком случае assert
теряет свой смысл.
В примере мы проверили, является ли переданный аргумент числовым типом данных. Если не является, то будет вызвано исключение и выведено указанное сообщение.
#исключения #assert
Красивый вывод таблиц
Недавно нам понадобилось логировать часть базы данных. И тут мы вспомнили про прекрасный модуль prettytable
, который позволяет красиво выводить таблицы.
Итак, имена столбцов задается с помощью атрибута table.field_names
. А добавлять строки с данными в таблицу можно методом table.add_row([])
, передавая туда список элементов.
Но даже если вы не фанат командной строки, то иногда нужно сохранить отчет о работе вашей программы в текстовый файл. В таком случае можно сохранить саму таблицу, вызвав метод table.get_string()
.
#трюки #prettytable
Разница между == и is
Многие разработчики не понимают разницу этих двух операторов сравнения. Из-за неправильного использования ==
и is
в приложениях могут возникнуть странные ошибки.
Оператор ==
проверяет равенство значений двух объектов. А оператор is
проверяет идентичность самих объектов. Его используют, чтобы удостовериться, что переменные указывают на один и тот же объект в памяти.
Но Python в целях производительности кеширует малые числа и короткие строки, поэтому возможны некоторые казусы, как в примере выше.
#тонкости
Используйте dict.get() вместо dict[]
Есть несколько способов получения значений из словарей, и даже по такой теме разработчики часто спорят.
Многие получают значения по ключам через квадратные скобки, но если такого ключа нет, то будет вызвано исключение.
Поэтому мы считаем, что лучше использовать метод get
у словарей. Его основной плюс заключается в том, что он принимает опциональный аргумент, отвечающий за значение по умолчанию.
Таким образом, если значение по ключу не найдено, то вернется дефолтное значение.
В итоге, мы убираем возможные ошибки в случае, если нужных ключей в словаре нет.
#python #dict
Получаем календарь
В модуле calendar
есть функция month()
, которая вернет календарь указанного месяца в виде строки, как показано в примере. А функция calendar()
выдаст целый год.
Если строки строки не устраивают, то в модуле есть много методов для получения самых разных итераторов. А еще там можно даже получить календарь в виде HTML.
Кстати, модуль является встроенным, отдельно его устанавливать не нужно.
#calendar
Создаем контекстный менеджер с помощью декоратора
Обычно протокол управления контекстом реализовывают с помощью класса и двух магических методов: __enter__
и __exit__
. Но такой подход может показаться слегка сложным.
Так вот, помимо написания своего класса, есть еще один способ создать контекстный менеджер — использовать декоратор @contextmanager
из встроенного пакета contextlib
.
Первая часть функции tag
, которая идёт до yield
, выполняется при входе в блок with
. Затем исполняется сам этот блок, а после этого завершается оставшаяся часть, которая идет после yield
.
#contextlib
Разделители для целых чисел
Трудно визуально различить целые числа подобные 10000000
и 100000000
. Использовать запятые, как в английском языке, не получится.
Но Python позволяет использовать нижнее подчеркивание как разделитель для улучшения читабельности.
Например, 1_000_000
будет интерпретироваться как целое число 1000000
.
#числа