Python Academy

Channel
Logo of the Telegram channel Python Academy
@python_academyPromote
52.54K
subscribers
Python Academy — один канал вместо тысячи учебников Чат канала: @python_academy_chat Сотрудничество: @Feel_focus Рекламодателям: bit.ly/3y1Py4
Получаем календарь

В модуле calendar есть функция month(), которая вернет календарь указанного месяца в виде строки, как показано в примере. А функция calendar() выдаст целый год.

Если строки строки не устраивают, то в модуле есть много методов для получения самых разных итераторов. А еще там можно даже получить календарь в виде HTML.

Кстати, модуль является встроенным, отдельно его устанавливать не нужно.

#calendar
Прогресс выполнения программы

Индикаторы прогресса добавляют наглядности в скриптах, которые исполняют какие-то функции, требующие времени для выполнения. Модуль tqdm является простым и лаконичным вариантом.

Привычный range можно заменить на trange для визуализации прогресса. А для итерации по какой-либо последовательности, достаточно просто передать её в функцию tqdm. Также модуль хорошо себя зарекомендовал и в Jupyter Notebook.

Кстати, интересный факт – название tqdm произошло от арабского слова "taqaddum" (تقدّم), которое означает "прогресс," а также это ещё и сокращение от "я тебя сильно люблю" на испанском (te quiero demasiado).

#модули #tqdm
Создаем контекстный менеджер с помощью декоратора

Обычно протокол управления контекстом реализовывают с помощью класса и двух магических методов: __enter__ и __exit__. Но такой подход может показаться слегка сложным.

Так вот, помимо написания своего класса, есть еще один способ создать контекстный менеджер — использовать декоратор @contextmanager из встроенного пакета contextlib.

Первая часть функции tag, которая идёт до yield, выполняется при входе в блок with. Затем исполняется сам этот блок, а после этого завершается оставшаяся часть, которая идет после yield.

 #contextlib
Порядок разрешения методов

В Python существует так называемый Method Resolution Order (MRO), или порядок разрешения методов в классе. Всё, что вам нужно знать – это порядок, в котором Python ищет нужный атрибут или метод.

Этот порядок можно получить при помощи атрибута __mro__. Он говорит о том, что если мы в примере выше попробуем обратиться к атрибуту value, Python будет искать сначала в классе A, далее в B, затем в C и в самом конце в object

Отсюда становится понятно, что артибут первее будет найден именно в классе B и равен он будет значению 1.

#классы
Разделители для целых чисел

Трудно визуально различить целые числа подобные 10000000 и 100000000. Использовать запятые, как в английском языке, не получится.

Но Python позволяет использовать нижнее подчеркивание как разделитель для улучшения читабельности.

Например, 1_000_000 будет интерпретироваться как целое число 1000000.

#числа
Удобная работа с файловыми путями

В стандартной библиотеке есть максимально удобный пакет pathlib, позволяющий осуществлять различную работу с файловыми путями.

Для представления пути к файлу есть класс Path, с объектами которого уже можно производить операции. Например, методы exists() и is_dir() проверяют, существует ли файл и является ли он директорией.

Но самой классной фичей является замена os.path.join() на более удобный и элегантный вариант с использованием слэшей, как показано на картинке.

Таким образом, пакет pathlib может стать частичной заменой os в некоторых случаях при работе с файловыми путями.

#pathlib
Находим опечатки в тексте

Полезный пакет spellchecker позволяет находить опечатки в тексте и даже дает возможные варианты исправлений.

Под капотом модуль использует алгоритм расстояния Левенштейна. А сам код основан на статье, написанной в блоге Питера Норвига. Короче, реализация интересная, советую поизучать.

Но даже если не вникать в подробности, то пакет использовать крайне легко. Примеры использования класса SpellChecker и его методов correction и candidates показаны на картинке.

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

#spellchecker
Форматируемые шаблоны строк

Модуль string из стандартной библиотеки содержит интересный класс Template, который позволяет вполне удобно создавать шаблоны строк для дальнейшего форматирования.

Такой способ появился ещё в Python 2.4, как замена %-форматированию (PEP 292), но популярным так и не стал. Поддерживает передачу значений по имени и использует $-синтаксис как в PHP.

В новых проектах, конечно, используются чаще всего f-строки и иногда метод format, но всё же о Template стоит хотя бы знать на случай, если придется работать с легаси кодом.

#строки
Красивые таблицы в терминале

PrettyTable – это простая библиотека, предназначенная для быстрого и легкого представления табличных данных в виде ASCII. Модуль можно установить привычным способом через pip.

Для создания таблиц и работы с ними используется класс PrettyTable из этого модуля. Задать название для столбцов можно с помощью атрибута fields_name. Строки в таблицу добавляются путем вызова метода add_row.

Более того, модуль prettytable позволяет регулировать различные параметры, сортировать данные, работать с html, а также взаимодействовать с csv и sql таблицами. Так что возможностей у этого модуля предостаточно.

#таблицы #prettytable
Нейросетевая модель Сбера GigaChat обрела новую модальность

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

Эта фича особенно актуальна для бизнеса, ведь появится ещё больше сценариев применения искусственного интеллекта. Например, компании смогут модерировать и классифицировать отзывы, автоматизировать линию поддержки и многое другое.

Есть и второй важный апдейт: объём запроса увеличился в четыре раза — с 8 до 32 тысяч токенов. Раньше действовало ограничение, равное 12 страницам А4. Теперь же лимит расширили до 48 страниц, что позволит поддерживать более длинные диалоги.

Обновлённый GigaChat уже доступен бесплатно в веб-версии и Telegram-боте.
Тестирование на pytest

pytest — ближе по духу к Python нежели unittest, который накладывает определенные обязательства при разработке тестов. Например, создание классов-наследников от TestCase или выполнение определенной процедуры запуска тестов.

При разработке на pytest ничего этого делать не нужно. Вы просто пишете функции, которые должны начинаться с "test_" и используете assert, встроенные в Python.

Также он поддерживает запуск тестов на unittest и nose, то есть полная обратная совместимость с ними.
Получаем и задаем лимит рекурсии

В Python не оптимизируется хвостовая рекурсия, из-за чего зачастую возникает RecursionError во время создания рекурсивных алгоритмов.

Но с помощью модуля sys можно посмотреть и даже изменить максимальную глубину рекурсии. Хотя делать это слегка опасно, так как каждый новый вызов занимает много памяти.

И вообще лучше стараться использовать не рекурсию, а обычные циклы, но это вы и так сами знаете.

#рекурсия #лимиты
Операции с zip архивами 

Для работы с zip файлами можно использовать встроенный модуль zipfile. Если кто не помнит, то zip файл — это архив, содержащий сжатые файлы. 

Просмотреть содержимое архива можно с помощью функции printdir, а извлечь все файлы можно вызвав extractfile

Также этот модуль позволяет создавать свои zip архивы, но мы решили не усложнять пример, поэтому просто прикладываем ссылку на документацию. 

#zipfile
Стартовала Квалификация на седьмой международный чемпионат Yandex Cup 2024. В этом году участники погрузятся в древние эпохи, чтобы решить задачи цивилизаций прошлого с помощью IT.

Всего шесть направлений: фронтенд, бэкенд, мобильная разработка, ML, аналитика и алгоритмы. Последнее открыто для участников со всего мира, а аналитика доступна также для юниоров от 14 лет. Призовой фонд чемпионата — 12,5 млн рублей. Квалификация продлится до 20 октября, полуфинал — 2 ноября, а финал пройдет в Ташкенте в декабре.

На картинках — примеры ситуаций, с которыми предстоит справиться в рамках отборочных этапов: настроить систему разгрузки драккаров в скандинавском порту викингов, помочь композитору в создании алгоритма для написания музыки или придумать систему архивации бамбуковых табличек астрономов династии Хань.

Победители также получат возможность пройти упрощенное собеседование в Яндекс! Регистрируемся тут.
Валидаторы данных

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

Модуль validators позволяет использовать уже готовые валидаторы для самых распространенных задач. В примере можете как раз увидеть валидацию почты и ссылок.

Помимо этого, validators позволяет также работать с ipv4, ipv6, mac адресами и многим другим. В итоге, имеем лаконичный и простой модуль с хорошим функционалом.

#validatoras
Создание процессов

Класс Process из встроенного модуля multiprocessing позволяет создавать процессы без прямого вызова функции fork, про которую писали раньше на канале.

При создании экземпляра Proccess необходимо передать функцию, которую требуется исполнить в отдельном дочернем процессе и аргументы этой функции. Процесс будет создан после вызова метода start. Внутри метода start будет вызван fork и будет исполнена функция в отдельном процессе.

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

#процессы #multiprocessing
Превью из длинного текста

Допустим, у нас есть какой-то длинный текст в виде строки и надо сделать превью этого текста, например, для сайта. Первое, что приходит на ум – использовать слайсинг строк.

Но, как видите, текст оборвался на полуслове, поэтому такой вариант отпадает. Такую проблему хорошо решает метод shorten из модуля textwrap.

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

#строки #textwrap
Всегда хотели стать частью крупной IT-компании? Тогда новая программа ускоренного отбора Young&&Yandex для вас!

Подайте заявку на участие в Intern Week Offer и получите заветный бейдж сотрудника Яндекса.

Доступно 3 направления: машинное обучение, аналитика данных и бэкенд-разработка (C++, Python, Java).

Вот, что надо сделать, чтобы стать частью команды:

— Подать заявку с 10 по 28 октября и получить доступ к тестовому заданию
— Выполнить задание с 28 октября по 4 ноября
— Пройти собеседование с командами и получить офер на стажировку

Подать заявку и стать стажером можно по ссылке. Ждём вас!
Telegram Center
Telegram Center
Channel