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

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

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

Канал включён в перечень РКН: https://rkn.link/TVu
Download Telegram
Редирект вывода программы

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

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

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

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

#contextlib
👎2👍1
Используйте dict.get() вместо dict[]

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

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

Поэтому мы считаем, что лучше использовать метод get у словарей. Его основной плюс заключается в том, что он принимает опциональный аргумент, отвечающий за значение по умолчанию.

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

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

#словари
4👎2
Разница между генераторными выражениями и генераторами коллекций

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

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

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

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

#python
👎3👍1
Разбираешься в радиочипах, оптике и связи? Забери до 1 000 000 рублей за свои инженерные навыки на турнире «Дронкон»

«Сталинские Соколы» открывают регистрацию на 4-й Всероссийский турнир «Дронкон», который пройдет с 22 по 26 августа.

Турнир пройдет по направлению:
• Инженерное дело: навыки программирования, сборка электронного оборудования, беспроводная связь, оптические системы + стратегия «Битва Дронов»;

Призовой фонд для победителей:
1 место – 1 000 000 рублей
2 место – 700 000 рублей
3 место – 500 000 рублей
Награда за 4-8 места - 100 000 рублей

Пройди заочный онлайн-этап и получи путевку на очный этап турнира в Республику Татарстан!

Перелет, питание, проживание - за счет организаторов.

Подать заявку и узнать подробности.
👎65👍3
Создаем бесконечный итератор

Функция cycle() из itertools принимает на вход итерируемый объект и создает бесконечный итератор, циклически возвращающий элементы данного объекта.

Фишка заключается в том, что когда элементы последовательности заканчиваются, итерация начинается вновь с первого элемента.

Но если вы проходитесь циклом по такому итератору, то важно предусмотреть выход из цикла, иначе он станет бесконечным (как у нас в первом случае на картинке).

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

#itertools
👎2🔥1
Делаем планировщик задач

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

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

Здесь на самом деле даже объяснять особо нечего, логика методов в этом пакете понятна на примерах.

#schedule
👎2👍1
Загрузка файлов асинхронно

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

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

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

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

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

#python #threading
👍51👎1
Сравнение двух аудиосообщений с использованием библиотеки Librosa

Librosa — библиотека, которая обеспечивает анализ и обработку звука. Сравнение производится путем вычисления характеристик MFCC (Mel Frequency Cepstral Coefficients), описывающих звуковую сигнатуру каждого аудио.

Важные замечания:
— Для точного сравнения аудиозаписей они должны иметь одинаковую продолжительность и аналогичные условия записи (громкость, уровень шума и т.д.).
Возможно потребуется дополнительная предварительная обработка, например, нормализация громкости.

#python #librosa
😱21👎1
Превращаем PDF в текст

Думаю, все периодические работают с PDF-документами. И зачастую это ручная и скучная работа. Но Python может автоматизировать даже такую рутинную задачу.

Модуль pdftotext создан именно для работы с документами в PDF формате. Устанавливается он через пакетный менеджер pip, а использовать его проще простого. Все основные операции представлены на картинке выше.

Кстати, здесь ещё интересно то, что исходный код модуля написан на C++. Поэтому есть небольшая вероятность, что придётся повоевать с зависимостями.

#pdftotext
👎3
Генерируем анекдоты

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

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

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

#pyjokes
5👍1👎1😱1
База данных на минималках

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

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

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

#shelve
👍1👎1
Обрезаем фотографии с помощью Python

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

Координаты обрезанной поверхности представлены диагональными координатами. При этом первые две точки находятся (x, y) от верхней левой диагональной точки, а следующие две точки (x2, y2) также являются диагональной точкой снизу справа.

Фотографии до и после изменения изображения представлены в посте выше.
3👎2
Сравниваем Django и Flask

Оба фреймворка крайне мощные, но выбрать надо что-то одно. Из общеизвестных фактов: Django – самый востребованный в плане работы, Flask – наиболее производительный.

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

Если в приоритете трудоустройство, то следует изучать Django. Но если вы хотите быстро начать создавать пет-проекты или изучать веб в целом, то рекомендуем рассматривать Flask.

#сравнение
👎2