Python Academy
49.1K subscribers
1.1K photos
2 videos
375 links
Python Academy — один канал вместо тысячи учебников

Чат канала: @python_academy_chat

Сотрудничество: @zubar89

Канал включён в перечень РКН: https://rkn.link/TVu
Download Telegram
Захват экрана Windows

Существует несколько библиотек на Python для захвата экрана компьютера под управлением операционной системы Windows, но самой быстрой оказалась библиотека d3dshot.

Она использует системные библиотеки DXGI и Direct3D, чтобы обеспечить чрезвычайно быструю и надежную функциональность захвата экрана.

Её можно применить, например, в реализации игровых ботов.

Пример можно посмотреть тут.

#d3dshot
Генерация QR кодов

Сегодня покажем создание QR кодов. Для этого нам понадобится модуль qrcode, который используется для создания изображений с QR кодом.

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

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

За создание картинки отвечает метод qrcode.make, который возвращает нам изображение в формате PIL.Image, а после этого мы его сохраняем в нужном нам файле.

Получившийся QR код можете посмотреть тут.

#qrcode #pillow
Работаем с картинками в Python

Библиотека Pillow — это очень мощный, быстрый и удобный инструмент для обработки графики в Python.

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

Метод Image.open('resources/img/cat.jpg') считывает картинку из папки.

img.convert('L') трансформирует картинку в черно-белую.

ImageOps.invert(image) обращает цвета.

img.transpose(Image.FLIP_LEFT_RIGHT) вертикально отзеркаливает картинку.

img.save('grayscale_cat.jpg') сохранит картинку на диске.

Больше официальных примеров и документацию можно посмотреть тут.

Пример можно посмотреть тут.

#pillow
Missingno

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

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

Интерактивный пример — тут.

#Missingo
Яндекс ищет тех, кто пишет на Python или Go

А также тех, кто хочет перейти на них с другого языка программирования. Не пропустите момент и успейте зарегистрироваться на Fast Track для бэкенд-разработчиков 26–27 февраля. Отборочный этап длится до 23 февраля, спешите! На мероприятии, которое пройдет в онлайн-формате, вы сможете за пару дней получить оффер в команду, которая разрабатывает FinOps платформу Яндекса.

FinOps платформа — это внутренняя высоконагруженная финансово-операционная система, через которую проходят денежные транзакции всех сервисов Яндекса. Приходите работать с нами, задачи сложные, но действительно интересные.

Регистрируйтесь, проходите отборочный этап и до встречи 26 и 27 февраля!
Работаем с котировками акций в Python

Библиотека yfinance предоставляет мощный и удобный инструмент для получения информации с ресурса Yahoo! finance в Python.

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

Тикер Макйрософт называется "MSFT", именно его необходимо вписать в методе поиска:

msft = yf.Ticker("MSFT")

Цена акции находится в поле ['regularMarketPrice']:

price = msft.info['regularMarketPrice']

Кроме этого yfinance предоставляет огромное количество такой информации о тикере как:

— Исторические данные рынка;
— Информация по дивидентам;
— Информация о фирме (адрес, количество работников, прибыль) и т. д.

Больше подробно об этой библиотеке можно посмотреть тут.

Пример с постройкой графика истории цены на тикер тут.

#yfinance
Работа с ChainMap из collections

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

Иногда нам нужно сгруппировать словари в один или же работать с множеством словарей как с одним, в этом случае вам поможет ChainMap.

Немного про особенности ChainMap:

— Представляет тот же интерфейс, что и словарь, но с дополнительными возможностями;
— Создает обновляемое представление;
— Видит внешние изменения во входных отображениях.

#collections
Counter из collections

Counter — это подкласс словаря dict. Сама коллекция нужна для хранения элементов в виде словарных ключей, а их счетчики хранятся в виде значений словаря.

Для отсутствующих элементов вернется 0 вместо KeyError.

Немного о методах:

elements — возвращает итератор по элементам, каждый из которых повторяется столько раз, сколько его количество.

most_common — возвращает список из n наиболее распространенных элементов.

#collections
Слабые ссылки

Weakref позволяет создавать слабые ссылки к объектам, но не поддерживают объект живым, если не осталось больше сильных ссылок.

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

#weakref
Рисуем графики

Графическая библиотека plotly позволяет создавать интерактивные качественные графики в Python.

В сегодняшнем примере применим эту библиотеку чтобы построить простой линейный график.

Сначала нам нужен список с данными, которые мы хотим изобразить на графике. Это может быть, например, список или numpy массив:

data = [1, 1.3, 2.1, 4, 3.5, 7]

Далее метод fig = px.line(y=data) принимает наши данные и строит график в виде точек с координатами из массива и обьединяет их линиями.

Метод fig.show() откроет графическое окно с изображенным графиком.

Кроме этого plotly позволяет строить такие графики как:

— Точечные графики;
— Круговые диаграммы;
— Гистограммы;
— Тепловые карты;
— Пузырьковые диаграммы;
— И многие другие.

Больше подробно об этой библиотеке и способы ее применения можно посмотреть тут. Интерактивный пример работы с plotly можно посмотреть тут.

#plotly
Аннотации типов

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

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

#typing
Управление версиями Python

Инструмент pyenv позволяет легко переключаться между несколькими версиями Python. Он прост в использовании и следует лучшим традициям UNIX, где каждая утилита хорошо выполняет одну свою задачу.

Вкратце, основной функционал pyenv выглядит так:

— Позволяет изменять глобальную версию Python для каждого пользователя;
— Обеспечивает поддержку версий Python для каждого проекта;
— Позволяет переопределить версию Python с помощью переменной окружения;
— Выполняет поиск команд из нескольких версий Python одновременно.

Кстати, этот проект основан на rbenv и ruby-build и модифицирован для Python.

#pyenv
Обработка исключений

Исключения — это тип данных, который нужен для того, что бы сообщать нам об ошибках.

Существует базовое исключение BaseException от которого наследуются все остальные исключения.

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

Стоит учесть, что мы можем делать бесконечное количество вложенных блоков.

Грамотным способом является вылавливать только те исключения, которые мы ожидаем.

#exceptions
Получаем метаданные из аудиофайла

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

Модуль поддерживает форматы метаданных APEv2 и ID3v2, анализируя все кадры ID3v2.4 (посмотреть все нужные теги ID3v2 можно тут).

#audio #mutagen
Получаем и задаем лимит рекурсии

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

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

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

#рекурсия #лимиты
Wikipedia в Python

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

Устанавливается этот модуль через пакетный менеджер pip. А использовать его можно без всяких трудностей – всё самое важное показано на картинке.

#модули #wikipedia
Дизассемблирование

Встроенный модуль dis позволяет декомпилировать написанную вами программу в байт-код Python.

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

#модули #dis
Сортировка словаря по значениям

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

Задача решается довольно просто при помощи аргумента key функции sorted для указания функции, которая будет вызываться на каждом элементе до сравнения.

#словари #сортировка
Функция zip

Функция zip создаёт итератор, который комбинирует элементы нескольких списков. Это позволяет осуществлять параллельный обход списков в циклах for или, например, выполнять параллельную сортировку.

#функции #zip
Функция reduce

Модуль functools позволяет хорошо раскрыть функциональные возможности Python. Например, в functools есть интересная функция reduce, которая позволяет «сжимать» данные, применяя последовательно функцию и запоминая результат.

Таким образом, в примере выше reduce умножает 1 на 2, затем результат этого умножения на 3 и так далее.

#функции #reduce
Создание словаря из набора ключей

Для создания словаря из известного набора ключей и одинаковых значений часто используют генераторы словарей (dict comprehensions).

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

#словари #fromkeys