Telegram Web Link
Отправляем запросы с HTTPX

Интересный пакет для работы с веб-запросам. Как говорят сами разработчики, это HTTP клиент следующего поколения.

Сравнивая с привычным requests, у httpx есть следующие преимущества:

— Стандартный синхронный интерфейс, но также есть поддержка асинхронности
— Поддержка HTTP/1.1 и HTTP/2
— Возможность отправлять запросы напрямую к WSGI и ASGI приложениям
— Полная поддержка аннотаций типов
— 100% покрытие тестами

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

#httpx
Генерируем анекдоты

Не самый полезный, но весьма интересный пакет pyjokes выдает различные шутки и анекдоты на 6 языках. Но русский, к сожалению, в это число не входит.

Метод get_joke() возвращает строку, которая хранит в себе случайную шутку. В аргументы можно указать язык, по умолчанию стоит английский.

Также можно указать категорию в аргументах — особенно классно заходят штуки про Чак Норриса с пометкой 'chuck'.

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

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

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

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

#классы
Генерируем QR-код

Простой, но удобный и полезный пакет для создания QR-кодов. Для отрисовки картинок используется Pillow, так что убедитесь, что он у вас установлен.

Чтобы создать объект картинки с QR-кодом необходимо вызвать метод make() и передать данные в качестве аргумента. А для сохранения нужно применить метод save() к полученному объекту.

Еще пакет позволяет создавать QR-коды на основе картинок и в 6 разных стилях. Но про это все, а также про продвинутые примеры использования вы почитаете уже в их документации.

#qrcode
Получаем календарь

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

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

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

#calendar
Как работают арифметические операции

Если кто-то еще не знает, то в Python всё является объектами: числа в том числе. И при любых операциях, включая арифметические, у объектов вызываются магические методы.

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

Еще стоит отметить, что у float поддерживается деление с остатком, то есть метод __div__. А int имеет только деление с округлением, реализованное в методе __floordiv__.

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

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

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

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

 #contextlib
Редирект вывода программы

В contextlib есть еще один прикольный контекстный менеджер — redirect_stdout, позволяющий перенаправить стандартный вывод программы.

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

Таким образом, данные из print() в контекстом менеджере будут переправлены в открытый ранее файл, так как мы его передали в аргумент redirect_stdout.

Убедится в этом можем, открыв файл заново и прочитав оттуда данные.

#contextlib
Ищем знания о Python

Подбираем онлайн-курсы для Python-разработчиков в поисковике Яндекса. Найдите тематический блок с предложениями онлайн-школ в поисковой выдаче. Здесь можно сразу посмотреть программу курса без захода на сайт школы.

По одной только теме python-разработки Поиск выдает более 150 различных курсов.
Воспользуйтесь фильтрами, чтобы выбрать уровень своих знаний (от новичка до уверенного специалиста), цель обучения и сразу отсечь курсы без сертификатов.

Курсы в поиске постоянно дополняются и, если раньше были доступны только программы для бизнеса, IT-сектора и управления, то теперь подборки пополнились курсами по разработке на Python, Go, SQL и многим другим направлениям.
ООП: композиция

Композиция — это отношение, при котором объекты одного класса связаны с объектами другого. Такой способ организации взаимодействия между классами также называется ассоциацией.

Как правило, в этом случае объект одного из классов (в примере выше это Salary) является полем другого (Employee). Сложного здесь, как вы видите, ничего нет.

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

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

#классы #ооп
ООП: композиция

Композиция — это отношение, при котором объекты одного класса связаны с объектами другого. Такой способ организации взаимодействия между классами также называется ассоциацией.

Как правило, в этом случае объект одного из классов (в примере выше это Salary) является полем другого (Employee). Сложного здесь, как вы видите, ничего нет.

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

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

#классы #ооп
Считаем ссылки на объект

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

Счетчик ссылок — это то, что помогает при проверке того, следует ли выполнять сборку мусора или нет. Сборщик мусора удаляет объект из памяти в случае, если на него ничего не ссылается.

Если на объект ссылается другой объект, то он имеет ненулевое значение ссылок и не может быть собран как мусор (если, конечно, вы не удалите вручную).

В примере выше продемонстрирован простой способ, как можно посмотреть количество ссылок у объекта.

#ctypes
Пакетный менеджер pip

Для работы с пакетами в Python есть специальная утилита pip — устанавливается она сразу вместе с интерпретатором.

Установить или удалить пакет можно через команды install и uninstall. После них нужно перечислить необходимые пакеты через пробел.

Команды list и freeze покажут все пакеты в текущем окружении, а также их версии. Обратите внимание на то, как выглядит вывод каждой из них.

А с помощью show можно посмотреть информацию о конкретном пакете: название, версию, описание, автора, лицензию и другое.

#pip
Генераторные выражения и списковые включения

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

Если вывести переменные, то видим, что значением переменной l является список, а переменная g хранит в себе объект генератора. И здесь возникает вопрос, что же использовать.

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

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

#генераторы
Работаем с атрибутами объектов

Помимо привычного обращения к атрибутам объектов через точку, в Python есть 4 специальных функции: getattr, setattr, delattr и hasattr.

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

Во всех функциях первыми двумя аргументами идут объект и название атрибута в виде строки. В setattr также нужно передать новое значение для атрибута.

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

#классы #атрибуты
Итерируемый счетчик

Еще один классный итератор из itertools — это count, который генерирует бесконечную последовательность чисел.

В аргументах можно задать значения start и step: первый отвечает за начальное значение, а второе за шаг, как и в range.

Обычно count редко используют с циклом for. Чаще можно встретить случаи с функциями типа zip или map.

#itertools
Использование комплексных чисел в Python

Никого здесь уже не удивить такими встроенными типами, как например int, float, и подобными. Но кроме них в Python существует еще один довольно интересный тип, а именно, complex.

В Python комплексные числа представлены в виде x + iy. А точнее говоря, вместо буквы i здесь используется буква j, во избежание некоторой путаницы, поскольку i чаще всего занята под циклы. Python преобразует реальные числа x и y (будь то int или float) в комплексное с помощью функции complex(x,y).

Комплексное число легко можно превратить в строку с помощью функции str или посчитать его модуль с помощью функции abs, а также для доступа к его реальной или мнимой частям можно воспользоваться методами real и imag.

Хотя complex и является встроенным типом, для более удобной работы с комплексными операциями рекомендуется импортировать модуль cmath.

#complex
Decimal и Fraction

Из-за того, что дробные числа с плавающей точкой хранятся в двоичном виде, мы обычно работаем с приблизительными значениями, как в первом варианте на скрине.

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

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

#decimal
Дзен и его противоречие

Еще в далеком PEP 20 был предложен Дзен Python — правила, которым рекомендуется следовать при разработке на этом языке. Посмотреть их можно, импортировав встроенный модуль this.

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

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

#zen
Вычисление размера объектов

Для вычисления размера объекта мы можем использовать функцию getsizeof(object[, default]) из модуля sys. Так как в python все по сути является объектами, то и вычислить размер в памяти мы можем у любого такого объекта.

И хотя все built-in (встроенные) объекты и вернут правильный размер, в общем случае это не должно быть верно для каких-либо пользовательских объектов.

Аргумент default позволяет определить значение, которое будет возвращено, если тип объекта не предоставляет средства для извлечения размера и вызовет TypeError .

Функция getsizeof вызывает метод __sizeof__ объекта и добавляет дополнительные служебные данные сборщика мусора.

#getsizeof
2025/02/23 22:09:43
Back to Top
HTML Embed Code: