Telegram Web Link
Более простой способ создания контекстных менеджеров

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

Но не всегда хочется реализовывать магические методы __enter__ и __exit__. В качестве альтернативы есть один классный прием в пакете contextlib. Там протокол управления контекстом реализован с использованием декоратора contextmanager.

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

 #contextlib
Перегрузка операторов

Сначала стоит напомнить, что методы, которые начинаются и заканчиваются двойными нижними подчеркиваниями, называются магическими.

Например, выше в классе Point мы определили __str__, который отвечает за то, как выводятся объекты класса на экран.

Для перегрузки оператора "+" нужно определить метод __add__. Он принимает два аргумента, которыми являются, соответственно, операнды в операции сложения.

Таким образом, когда разработчик пишет запись p1 + p2, интерпретатор воспринимает это в виде Point.__add__(p1, p2). Для всех операторов в языке, включая и логические, есть свои магические методы.

#классы
Метод setdefault()

Метод setdefault() в Python возвращает значение по указанному ключу из словаря. Если ключ отсутствует в словаре, метод добавляет ключ в словарь со значением по умолчанию, а затем возвращает это значение.

Метод setdefault() имеет два параметра:

— Ключ, по которому необходимо получить значение.
— Значение по умолчанию, которое будет добавлено в словарь, если ключ отсутствует.

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

#python
Обрабатываем номера телефонов

Пакет phonenumbers основан на библиотеке libphonenumber от Google, которая позволяет форматировать, парсить и проверять номера телефонов.

Основным классом, который представляет номер, является PhoneNumber. Объект можно создать, вызвав метод parse() и передав в аргументы номер телефона в виде строки. Вторым аргументом также можно указать страну.

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

#python #phonenumbers
pow()

В Python функция pow() используется для вычисления степени числа. Вот как она работает:

result = pow(x, y, z)



где: x — основание степени,
y — показатель степени,
z (необязательный параметр) — модуль, по которому производится вычисление.
Если z указан, то pow(x, y, z) возвращает (x y) % z. Если z не указан, то возвращается x y.

#python
Распознаем речь используя SpeechRecognition

SpeechRecognition — это библиотека на Python, которая предоставляет возможность использовать API для распознавания речи от различных компаний, таких как Google, Microsoft, IBM и другие. Кроме того, она поддерживает работу в офлайн-режиме.

Эта библиотека упрощает процесс интеграции голосовых команд и обработки аудиоданных в ваших проектах. Благодаря широкому спектру возможностей, SpeechRecognition подходит для создания приложений с голосовым управлением, интеллектуальных ассистентов и многого другого.

#python #speechrecognition
Упрощение создания операторов сравнения

Для создания объектов с поддержкой операторов сравнения в классе обычно требуется реализовать большое количество магических методов, а именно – __lt__, __le__, __eq__, __ne__, __gt__, __ge__.

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

В таком случае достаточно реализовать в классе только __lt__ и __eq__. Эти два метода являются минимумом, который нужен декоратору для конструирования остальных методов.

#классы
База данных на минималках

Встроенный модуль shelve позволяет сохранять и читать произвольные данные. Таким образом, можно сохранять любые Python объекты для дальнейшего использования.

Доступ к данным осуществляется с помощью ключей, как и в случае со словарями. А метод shelve.open поддерживает протокол контекстного менеджера, то есть можно не вызывать метод close.

В документации заявляют, что такая база данных является "надежной". Но учитывая, что shelve написан на pickle, его стоит использовать только в совсем маленьких проектах.

#shelve
Хотите выиграть классные призы в новом году?🎁

В этом вам помогут знания и любовь к наукам — физике, математике, информатике, химии💡

Всероссийская олимпиада школьников «13-й элемент. Alхимия будущего» для учеников 8–11 классов запустила масштабный розыгрыш с ценными призами. Среди них:

1 игровая консоль Xbox
3 смарт-часов Xiaomi Redmi Watch 3 Active
5 наушников TWS Xiaomi Redmi
7 толстовок
10 рюкзаков
15 футболок

Розыгрыш проходит в группе олимпиады во «Вконтакте»: https://vk.com/13element_al

👉🏻А чтобы стать одним из претендентов на приз, нужно всего лишь зарегистрироваться на олимпиаду: clck.ru/3EiNbX

Победителей выберут с помощью программы рандомус. Результаты мы узнаем 13 февраля!

🔥Наиболее успешных участников олимпиады также ждут ценные призы от РУСАЛ и дополнительные баллы при поступлении от ведущих вузов страны. Отборочный этап продлится до 31 января 2025 года.
Познакомьтесь с 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
Получаем гласные

Этот пример возвращает в строке найденные гласные "a e i o u". Это может оказаться полезным при поиске или обнаружении гласных.
Определение литеральных типов

Когда нам может понадобится определить из полученной строки литеральный тип (строки, числа, списки, кортежи, словари, логические значения и None), мы можем воспользоваться функцией literal_eval() из модуля ast.

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

#ast #literal_eval
Делаем ошибки более читаемыми

В Python есть удобный модуль pretty_errors, который делает стандартный вывод исключений и их traceback более удобным для чтения.

Для того, чтобы он заработал, достаточно импортировать его в ваш код.

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

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

Вообще float является крайне интересным типом данных и не перестает удивлять своими особенностями. Про значение Not a Number мы уже писали, а вот сегодня поговорим про infinity.

Строковые литералы 'inf' и 'infinity' можно конвертировать в float, и в результате получается значение бесконечности. Для отрицательной "бесконечности" нужно поставить знак минуса перед словом.

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

#float
Загрузка файлов асинхронно

Если у нас есть список URL картинок для загрузки, использование простого цикла for позволит нам загрузить их последовательно, по одной за раз.

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

Для параллелизации мы можем использовать ThreadPoolExecutor из модуля concurrent.futures. Этот инструмент позволяет выполнить функцию загрузки в нескольких параллельных потоках, где в конструкторе необходимо указать максимальное количество потоков для одновременного выполнения.

С помощью метода .map(download, urls) можно развернуть функцию загрузки на каждый URL из списка, обеспечивая их параллельную обработку.

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

#python #threading
За научной атмосферой — на очный отборочный этап Всероссийской олимпиады школьников «13-й элемент. Alхимия будущего» для учеников 8–11 классов 🙌🏻

Каждый из участников может выбрать наиболее комфортный для него вариант решения комплексного теста — онлайн или очный, на площадках партнеров в своем городе

Посмотреть расписание и первыми узнавать новости олимпиады можно в официальной группе: https://vk.com/13element_al

Регистрация на олимпиаду уже открыта по ссылке: clck.ru/3EiNbX

Финалистов и лауреатов ждут подарки от РУСАЛ и дополнительные баллы при поступлении от ведущих вузов и техникумов страны.

Присоединяйтесь! Отборочный этап проходит до 31 января 2025 года. Его результаты объявят до 17 февраля🗓

Финальные испытания пройдут 13 марта, а торжественное подведение итогов – 4 апреля.

Официальный сайт проекта: clck.ru/3EiNbX
Контактные номера: 8(913)569-68-48, 8(929)333-07-22
Гайд по Python: с чего начать новичку 

На канале — много новых подписчиков. Поэтому написал подробную статью, что учить, читать и смотреть. Разделил на три области: веб-разработка, машинное обучение и анализ данных. 

Также прочитайте "Первые шаги в Python" — это тоже хороший вводный гайд, где много полезных книг, сайтов для практики и курсов. 

Читать 5 минут

#статья
Узнаем кодировку текста

Думаю, у всех были ситуации, когда вы открыли файл или получили ответ от сервера, а внутри оказывался набор странных символов в непонятной кодировке.

Пакет chardet как раз был создан для работы с кодировкам. Его метод detect выдает предполагаемую кодировку с точностью от 0 до 1.

В примере на картинке мы получили ответ по запросу к серверу, взяли его содержимое и проверили кодировку через этот метод.

#chardet
Познакомьтесь с 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
Операции с zip архивами 

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

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

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

#zipfile
2025/02/22 15:56:00
Back to Top
HTML Embed Code: