Работаем с картинками в Python
Библиотека 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')
сохранит картинку на диске.Многопоточность
В модуле
Параметр
Когда
#потоки #многопоточность
В модуле
threading
новый поток выполнения может начинаться с нового threading.Thread
и присвоения ему функции для выполнения.Параметр
target
ссылается на функцию (или вызываемый объект), который будет работать. Нить не начнет выполнение до start
, также не будет вызываться Thread
объекта.Когда
my_thread
завершается, вызов start
выкинет исключение RuntimeError. Если вы хотите запустить Thread в фоновом режиме, то передавайте daemon=True
или установите my_thread.daemon
в True
перед вызовом start()
.#потоки #многопоточность
Преобразования текста в аудио с помощью Python
Для преобразования текста в аудио на Python можно использовать библиотеку gTTS (Google Text-to-Speech).
В данном примере мы используем текст "Привет!» на русском языке, создаем объект gTTS и сохраняем аудиофайл "hello.mp3". Затем мы воспроизводим аудиофайл с помощью утилиты mpg321.
Для преобразования текста в аудио на Python можно использовать библиотеку gTTS (Google Text-to-Speech).
В данном примере мы используем текст "Привет!» на русском языке, создаем объект gTTS и сохраняем аудиофайл "hello.mp3". Затем мы воспроизводим аудиофайл с помощью утилиты mpg321.
Отправляем универсальные уведомления
Наткнулся на интересный пакет notifiers, который позволяет отправлять уведомления на почту, через Телеграм бота, в Слэк и еще много куда. Всего доступно 16 провайдеров, подробнее про них в документации.
В функцию get_notifier передаем название провайдера в виде строки и получаем объект, с которым можно работать. Отправить уведомление можно с помощью универсального метода notify.
Если не уверены, какие аргументы нужно передать для отправки уведомления, то можете посмотреть их через атрибут required у созданного объекта.
Например, для Телеграма нужно передать токен бота, айди чата и само сообщение. В случае с почтой необходимо указать логин, пароль, адресата и также сообщение.
#уведомления #notifiers
Наткнулся на интересный пакет notifiers, который позволяет отправлять уведомления на почту, через Телеграм бота, в Слэк и еще много куда. Всего доступно 16 провайдеров, подробнее про них в документации.
В функцию get_notifier передаем название провайдера в виде строки и получаем объект, с которым можно работать. Отправить уведомление можно с помощью универсального метода notify.
Если не уверены, какие аргументы нужно передать для отправки уведомления, то можете посмотреть их через атрибут required у созданного объекта.
Например, для Телеграма нужно передать токен бота, айди чата и само сообщение. В случае с почтой необходимо указать логин, пароль, адресата и также сообщение.
#уведомления #notifiers
Упрощение создания операторов сравнения
Для создания объектов с поддержкой операторов сравнения в классе обычно требуется реализовать большое количество магических методов, а именно –
Про то, что делает каждый из них расскажем отдельным постом, но сейчас покажем, как можно сильно упростить реализацию подобного класса. Для этого можно использовать декоратор
В таком случае достаточно реализовать в классе только
#классы
Для создания объектов с поддержкой операторов сравнения в классе обычно требуется реализовать большое количество магических методов, а именно –
__lt__
, __le__
, __eq__
, __ne__
, __gt__
, __ge__
.Про то, что делает каждый из них расскажем отдельным постом, но сейчас покажем, как можно сильно упростить реализацию подобного класса. Для этого можно использовать декоратор
total_ordering
из пакета functools
.В таком случае достаточно реализовать в классе только
__lt__
и __eq__
. Эти два метода являются минимумом, который нужен декоратору для конструирования остальных методов.#классы
Точка входа
В некоторых языках программирования есть функции
Как вариант, многие пишут основную логику программы в обычную функцию
Переменная
Таким образом, программа корректно заработает, только если запустить ее напрямую. Если импортировать ее как модуль в другой скрипт, то условие не сработает.
#main
В некоторых языках программирования есть функции
main()
, с которых начинается выполнение программы. Но в Python весь код исполняется построчно.Как вариант, многие пишут основную логику программы в обычную функцию
main()
, а вызывают ее только в условии if __name__ == '__main__'
. Здесь стоит объяснить отдельно про то, что такое __name__
.Переменная
__name__
— это специальная переменная, которая будет равна '__main__'
, только если файл запускается как основная программа. А при импорте в качестве модуля выставляется равной имени модуля.Таким образом, программа корректно заработает, только если запустить ее напрямую. Если импортировать ее как модуль в другой скрипт, то условие не сработает.
#main
Получение срезов итераторов
Если вы попытаетесь получить срез итератора, то столкнётесь с ошибкой TypeError, сообщающей о том, что на объект-генератор нельзя оформить подписку. Однако эта проблема поддаётся решению (см картинку).
Воспользовавшись методом itertools.islice, можно создать объект islice, который представляет собой итератор, выдающий нужные элементы. Однако здесь важно отметить то, что эта конструкция использует все элементы генератора вплоть до начала среза и все элементы в объекте islice.
#python
Если вы попытаетесь получить срез итератора, то столкнётесь с ошибкой TypeError, сообщающей о том, что на объект-генератор нельзя оформить подписку. Однако эта проблема поддаётся решению (см картинку).
Воспользовавшись методом itertools.islice, можно создать объект islice, который представляет собой итератор, выдающий нужные элементы. Однако здесь важно отметить то, что эта конструкция использует все элементы генератора вплоть до начала среза и все элементы в объекте islice.
#python
Добавляем классу большую функциональность
На прошлой неделе мы объясняли декоратор
Зачем использовать. Статические методы делают код более читабельным и повторно используемым. Его также удобнее использовать для импорта по сравнению с обычными функциями, поскольку функцию не нужно отдельно импортировать.
В чем же разница?
На прошлой неделе мы объясняли декоратор
@classmethod
, а сейчас рассмотрим @staticmethod
. @staticmethod
можно воспринимать как метод, который "не знает, к какому классу относится". Он просто получает переданные аргументы, без неявного первого аргумента, и его определение не изменяется через наследование. Еще раз: статические методы прикреплены к классу лишь для удобства — и не могут менять состояние ни класса, ни его экземпляра.Зачем использовать. Статические методы делают код более читабельным и повторно используемым. Его также удобнее использовать для импорта по сравнению с обычными функциями, поскольку функцию не нужно отдельно импортировать.
В чем же разница?
@classmethod
используется в суперклассе для определения того, как метод должен вести себя, когда он вызывается разными дочерними классами. @staticmethod
используется, когда мы хотим вернуть объект, независимо от вызываемого дочернего класса.Создаем пакеты
Пакет в Python — это, грубо говоря, папка с другими папками и модулями. Помимо разделения частей проекта, пакеты нужны для формирования пространства имен, чтобы можно работать с пакетами и модулями через точку, как в примере выше.
При импорте вида
Также примечателен файл init.py, который раньше был обязателен для создания пакетов. С версии Python 3.3 его необходимость пропала. Однако его функциональность на этом не заканчиваются.
#модули #пакеты
Пакет в Python — это, грубо говоря, папка с другими папками и модулями. Помимо разделения частей проекта, пакеты нужны для формирования пространства имен, чтобы можно работать с пакетами и модулями через точку, как в примере выше.
При импорте вида
from package import *
будет подключены либо все модули и объекты модуля __init__.py
, либо то, что находится в переменной __all__
в том же модуле __init__.py
— подробнее про эту переменную было в посте ранее.Также примечателен файл init.py, который раньше был обязателен для создания пакетов. С версии Python 3.3 его необходимость пропала. Однако его функциональность на этом не заканчиваются.
#модули #пакеты
Pyfiglet — генерация ASCII-арт текста
Pyfiglet — это библиотека Python, которая позволяет легко создавать красивый ASCII-арт текст прямо в консоли. Идеально подходит для добавления стилизованных заголовков и баннеров в ваши консольные приложения.
Отличный способ оживить вывод вашего кода и привлечь внимание к важным сообщениям.
Pyfiglet — это библиотека Python, которая позволяет легко создавать красивый ASCII-арт текст прямо в консоли. Идеально подходит для добавления стилизованных заголовков и баннеров в ваши консольные приложения.
Отличный способ оживить вывод вашего кода и привлечь внимание к важным сообщениям.
K2 Cloud и PiterPy2024 — бесплатный день конференции для питонистов.
Ребята из K2 Cloud помогли организовать Community Day для python-разработчиков. 18 сентября ты сможешь бесплатно послушать часть докладов конференции PiterPy: от мастерства карьерного роста до хитростей асинхронного программирования. Для участия нужно только зарегистрироваться.
Подробнее на сайте
Ребята из K2 Cloud помогли организовать Community Day для python-разработчиков. 18 сентября ты сможешь бесплатно послушать часть докладов конференции PiterPy: от мастерства карьерного роста до хитростей асинхронного программирования. Для участия нужно только зарегистрироваться.
Подробнее на сайте
Познакомьтесь с IceCream: Улучшенным выводом в Python
Hедавно мы наткнулись на потрясающий инструмент для отладки и разработки в
Что такое
Преимущества
1. Читабельность и простота в использовании:
2. Цветовая кодировка:
Настройка
Это добавит контекст, такой как имя файла и номер строки, в вывод:
Автор идеи поста:
Если у вас есть предложения для следующего поста, делитесь в комментариях!
#Python #logging #icecream
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
Цепочка исключений
Для формирования цепочек исключений используется ключевое слово
В результате, если вызванное исключение не обработано, то на вывод будут отправлены оба исключения.
#exception
Для формирования цепочек исключений используется ключевое слово
from
, после которого требуется указать ещё одно исключение. Это исключение будет подвязано к вызванному в атрибут __cause__
(поддерживает запись).В результате, если вызванное исключение не обработано, то на вывод будут отправлены оба исключения.
#exception
Создание дочернего процесса
Метод
Кстати, получается интересный случай, в коде примера выполняется и блок
#os #fork #процессы
Метод
os.fork()
создаёт дочерний процесс в том же месте кода, вызывая системную функцию fork()
, и возвращает PID (Process Identifier), который равен PID дочернего процесса в родительском процессе и нулю в новом.Кстати, получается интересный случай, в коде примера выполняется и блок
if
, и else
. Если не знать про os.fork()
и посмотреть вывод подобного кода, то возникнет много вопросов.#os #fork #процессы
Как работают статические методы
Статические методы создаются в классе при помощи декоратора
Такой тип методов не может модифицировать ни объект, ни сам класс. То есть передавать объект или класс и прописывать
Обычную функцию стоит вносить в класс в качестве статического метода в том случае, когда эта функция логически относится к классу и имеет смысл там быть.
#ооп
Статические методы создаются в классе при помощи декоратора
@staticmethod
. Такие методы привязаны к классу, а не объекту — в этом и есть основное отличие.Такой тип методов не может модифицировать ни объект, ни сам класс. То есть передавать объект или класс и прописывать
self
или cls
в аргументах не нужно.Обычную функцию стоит вносить в класс в качестве статического метода в том случае, когда эта функция логически относится к классу и имеет смысл там быть.
#ооп
Прочитать произвольную строку из файла
Предположим, вы решили разработать чат-бота. В нем конечно же будет с десяток самых крутых и полезных функций, может быть даже в нем будет модные нынче нейросети.
И конечно же не обошлось без приветствия, вы специально заготовили несколько различных вариантов в файле
Чтобы вывести это на экран, может помочь функция
#linecache #file
Предположим, вы решили разработать чат-бота. В нем конечно же будет с десяток самых крутых и полезных функций, может быть даже в нем будет модные нынче нейросети.
И конечно же не обошлось без приветствия, вы специально заготовили несколько различных вариантов в файле
text.txt
:Приветствую!
Здравствуйте!
Ку, здарова.
Добрый день!
Привет!
Чтобы вывести это на экран, может помочь функция
getline
из модуля linecache
. В чем главное отличие этой функции от обычного метода чтения из файла? Функция getline
кеширует все строчки файла в списке, так что следующие вызовы get_answer
отработают моментально.#linecache #file
Упаковка параметров с помощью urlencode
Довольно часто приходится работать с разнообразными API и совершать get-запросы с передачей множества параметров. Чаще всего составление запроса в коде выглядит примерно так:
Смотрится не слишком презентабельно, однако есть слегка более длинный, но значительно улучающий читаемость кода вариант – функция
#трюки #urllib
Довольно часто приходится работать с разнообразными API и совершать get-запросы с передачей множества параметров. Чаще всего составление запроса в коде выглядит примерно так:
url = 'https://example.com?item={}&size={}&color={}&amount={}'.format('t-shirt', 'M', 'white', 5)
Смотрится не слишком презентабельно, однако есть слегка более длинный, но значительно улучающий читаемость кода вариант – функция
urlencode
из модуля urllib
.#трюки #urllib