Python Academy — один канал вместо тысячи учебников Чат канала: @python_academy_chat Сотрудничество: @zubar89 Канал включён в перечень РКН: https://rkn.link/TVu
Highload, системный дизайн, производительность и масштабирование
Приглашаем на курс для прокачки навыков архитектора и проектировщика, которые важны для профессионального роста программиста.
🌐 С курсом «Системный дизайн высоконагруженных проектов» вы:
▪️изучите ключевые фундаментальные паттерны и получите навыки проектирования проектов с миллионной аудиторией (балансировка, масштабирование апп/кешей/субд, высокая доступность и кластерные решения, шардинг, CAP/PACELS, консистентность, саги, транзакционные очереди и многое другое)
▪️поупражняетесь в проектировании и получите обратную связь на реальных задачах: магазин/маркетплейс, такси/доставка, обьявления, соцсети, дейтинг, игры, википедия, мессенжер, CDN, хранилище файлов, онлайн-кинотеатр, счетчики, удаленный мониторинг, интеграционные вебхуки, рассылки и тд.
▪️ научитесь планировать нагрузку и связывать
бизнес-показатели с нефункциональными требованиями к системе
▪️ попрактикуемся в проведении и прохождения секций системного дизайна на интервью
Всё в формате «живых» онлайн-сессий (лекции, брейнштормы, презентации домашних проектов).
🥸 Кто мы: школа Devhands, основатель школы и автор курса Алексей Рыбак, ex-СТО Badoo, с 20-летним опытом высоконагруженных проектов и и управления глобальными технологическими организациями, член программного комитета Highload.
🗓 Старт 22-го октября, изучаем программу, записываемся здесь
Реклама. ИП Рыбак А.А., ИНН: 771407709607, Erid: 2VtzqvcU6Vf
Делаем ошибки более читаемыми
В Python есть удобный модуль pretty_errors
, который делает стандартный вывод исключений и их traceback более удобным для чтения.
Для того, чтобы он заработал, достаточно импортировать его в ваш код.
Вывод ошибок в вашей программе будет выглядеть более читаемым. Более того, разные части вывода будут помечаться разным цветом вместо монотонного серого цвета.
Также модуль можно модифицировать, указав параметры в конфиге. Подробнее можете почитать в документации модуля.
Присоединяйся к всероссийскому чемпионату по программированию МТС True Tech Champ 2024 с призовым фондом в 10 250 000 ₽. Решай алгоритмические задачи или программируй роботов.
Какие задания и этапы ждут участников, расскажут на вводном вебинаре создатели треков 26 сентября в 17:00. Регистрируйся по ссылке.
В чемпионате найдутся задачи для начинающих ИТ-специалистов и опытных разработчиков.
✔️ В алгоритмическом треке участники будут работать со структурами данных, покажут математические навыки и умение решать алгоритмические задачи.
✔️ В треке по программированию роботов нужно будет соревноваться на скорость прохождения лабиринта робомышью.
Подробнее о чемпионате — по ссылке.
Регистрация участников: до 12 октября
Старт онлайн-этапов: с 1 октября
Финал в офлайне: 8 ноября
Упаковка параметров с помощью urlencode
Довольно часто приходится работать с разнообразными API и совершать get-запросы с передачей множества параметров. Чаще всего составление запроса в коде выглядит примерно так:url = 'https://example.com?item={}&size={}&color={}&amount={}'.format('t-shirt', 'M', 'white', 5)
Смотрится не слишком презентабельно, однако есть слегка более длинный, но значительно улучающий читаемость кода вариант – функция urlencode
из модуля urllib
.
#трюки #urllib
С 1 сентября для всех граждан РФ открыта запись на программу бесплатного шестимесячного обучения с последующим трудоустройством.
Цель программы — обучение и подготовка кадров на дефицитные направления IT отрасли.
Запись продлится до конца сентября, количество мест ограничено.
Условия участия в программе:
- пройти проф.тест;
- получить результаты и выбрать подходящее направление обучения;
- закончить обучение по специальности и пройти стажировку.
Вычисление выражений Python
Вы наверняка знакомы с eval
, но знаете ли вы о literal_eval
? Вряд ли. Для безопасного исполнения выражений, содержащих исключительно литералы, вы можете делать так, как показано на картинке выше.
Между прочим, данная фича находится в языке уже очень давно.
#tips #eval
Цепочка исключений
Для формирования цепочек исключений используется ключевое слово from
, после которого требуется указать ещё одно исключение. Это исключение будет подвязано к вызванному в атрибут __cause__
(поддерживает запись).
В результате, если вызванное исключение не обработано, то на вывод будут отправлены оба исключения.
#exception
Познакомьтесь с 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
Pyfiglet — генерация ASCII-арт текста
Pyfiglet — это библиотека Python, которая позволяет легко создавать красивый ASCII-арт текст прямо в консоли. Идеально подходит для добавления стилизованных заголовков и баннеров в ваши консольные приложения.
Отличный способ оживить вывод вашего кода и привлечь внимание к важным сообщениям.
Метод ljust()
Делает длину строки не меньшей width, по необходимости заполняя последние символы символом fillchar.
В IT Школе Samsung продолжается набор
Уровень джуниор-разработчика в школьном возрасте? Легко! Если вы учитесь в старших классах, увлекаетесь программированием и хотите создавать мобильные приложения на Android – ждем вас!
Новый учебный курс 2024/2025 стартует уже в сентябре. Обучение проходит на сертифицированных площадках программы в 50 городах России. Не нашли нужный город? Доступно обучение онлайн.
Длительность обучения — 1 учебный год, с сентября по июнь.
Что вас ждет:
- Изучение фундаментальных разделов программирования на примере языка Java и создания Android приложений
- Решение сотен задач по программированию с автоматической проверкой кода
- Ежегодный конкурс выпускных проектов – мобильных приложений
Подать заявку на бесплатное обучение можно по 19 сентября 2024 года на сайте.
Реклама. ООО "СЭРК" , ИНН 7703608910
Точка входа
В некоторых языках программирования есть функции main()
, с которых начинается выполнение программы. Но в Python весь код исполняется построчно.
Как вариант, многие пишут основную логику программы в обычную функцию main()
, а вызывают ее только в условии if __name__ == '__main__'
. Здесь стоит объяснить отдельно про то, что такое __name__
.
Переменная __name__
— это специальная переменная, которая будет равна '__main__'
, только если файл запускается как основная программа. А при импорте в качестве модуля выставляется равной имени модуля.
Таким образом, программа корректно заработает, только если запустить ее напрямую. Если импортировать ее как модуль в другой скрипт, то условие не сработает.
#main
С 1 августа для граждан РФ открыт набор на бесплатное 6-месячное обучение IT-профессиям.
Прием заявок продлится до конца месяца, количество льготных мест ограничено.
Чтобы узнать, доступно ли Вам бесплатное обучение нужно:
- Перейти по ссылке;
- Заполнить анкету и пройти тестирование на проф. пригодность (занимает менее 3 минут);
- На основании ваших ответов вы сразу узнаете, прошли ли вы на бесплатное обучение и какая профессия вам подойдет.
Foodtech tour Яндекса возвращается: стартуем с митапом в Москве 19 сентября!
В программе суровая энтерпрайз-разработка для опытных бэкендеров. Эксперты расскажут о работе с монолитами на примере Еды и переосмыслении процессинга заказов в Лавке. От Маркета заявлен воркшоп с архитектурными кейсами: без практики точно не останемся.
Foodtech tour охватит 4 столицы: Москва — 19 сентября, Санкт-Петербург — 17 октября, Казань — 14 ноября и Минск — 5 декабря.
👉🏻 Регистрируйтесь в своём городе!
Реклама. ООО «Яндекс.Такси». ИНН 7704340310
Многопоточность
В модуле threading
новый поток выполнения может начинаться с нового threading.Thread
и присвоения ему функции для выполнения.
Параметр target
ссылается на функцию (или вызываемый объект), который будет работать. Нить не начнет выполнение до start
, также не будет вызываться Thread
объекта.
Когда my_thread
завершается, вызов start
выкинет исключение RuntimeError. Если вы хотите запустить Thread в фоновом режиме, то передавайте daemon=True
или установите my_thread.daemon
в True
перед вызовом start()
.
#потоки #многопоточность
Как определить нажатия клавиш на клавиатуре с помощью Python
Установим пакет keybord - pip3 install keyboard.
Подробно с этим пакетом можно ознакомиться здесь.
Генерация QR кодов
Сегодня покажем создание QR кодов. Для этого нам понадобится модуль qrcode
, который используется для создания изображений с QR кодом.
Все максимально просто, за нас по сути все делает уже написанный модуль.
Выше на картинке мы сделали простую функцию generate
, которая принимает какую-то информацию и название файла, в который нужно сохранить результат в виде QR кода.
За создание картинки отвечает метод qrcode.make
, который возвращает нам изображение в формате PIL.Image
, а после этого мы его сохраняем в нужном нам файле.
Получившийся QR код можете посмотреть тут.
#qrcode #pillow
Обрабатываем естественный язык
TextBlob — удобный пакет для обработки текста. Он предоставляет простой API для погружения в общие задачи обработки естественного языка (NLP), такие как анализ тональности, пометку частей речи, перевод и многое другое.
Здесь особенно круто, что к объектам класса TextBlob
можно применять методы строк (upper
, split
, format
и т. д.) и в целом обращаться с ними как с обычными строками.
Документация находится здесь, но некоторые примеры есть и на картинке выше. Еще важно, что несколько функций, например translate()
, требуют подключения к интернету.
#textblob
Прочитать произвольную строку из файла
Предположим, вы решили разработать чат-бота. В нем конечно же будет с десяток самых крутых и полезных функций, может быть даже в нем будет модные нынче нейросети.
И конечно же не обошлось без приветствия, вы специально заготовили несколько различных вариантов в файле text.txt
:Приветствую!
Здравствуйте!
Ку, здарова.
Добрый день!
Привет!
Чтобы вывести это на экран, может помочь функция getline
из модуля linecache
. В чем главное отличие этой функции от обычного метода чтения из файла? Функция getline
кеширует все строчки файла в списке, так что следующие вызовы get_answer
отработают моментально.
#linecache #file
Как работают статические методы
Статические методы создаются в классе при помощи декоратора @staticmethod
. Такие методы привязаны к классу, а не объекту — в этом и есть основное отличие.
Такой тип методов не может модифицировать ни объект, ни сам класс. То есть передавать объект или класс и прописывать self
или cls
в аргументах не нужно.
Обычную функцию стоит вносить в класс в качестве статического метода в том случае, когда эта функция логически относится к классу и имеет смысл там быть.
#ооп
Создание дочернего процесса
Метод os.fork()
создаёт дочерний процесс в том же месте кода, вызывая системную функцию fork()
, и возвращает PID (Process Identifier), который равен PID дочернего процесса в родительском процессе и нулю в новом.
Кстати, получается интересный случай, в коде примера выполняется и блок if
, и else
. Если не знать про os.fork()
и посмотреть вывод подобного кода, то возникнет много вопросов.
#os #fork #процессы
🚀 Яндекс разработал AI-ассистента для работы с кодом
С помощью сервиса разработчики смогут по фрагменту кода сгенерировать наиболее вероятное его продолжение. Это поможет упростить написание и редактирование кода и ускорить продуктовую разработку в компаниях. Ассистент протестировали тысячи разработчиков Яндекса, 60% из которых стали постоянными пользователями сервиса.
Использование Yandex Code Assistant помогает повысить эффективность работы: доверьте рутинные операции AI и сосредоточьтесь на решении более сложных задач, чтобы ускорить разработку и сократить Time to market. Да и просто делает жизнь разработчиков проще и счастливее.
⚙️ Для кого
Инструмент полезен разработчикам любого уровня, а также техническим руководителям, которые хотят оптимизировать процессы и повысить продуктивность своих команд.
→ Как попробовать
Yandex Code Assistant доступен бесплатно на облачной платформе Yandex Cloud в режиме Preview. Для тестирования оставьте заявку.
K2 Cloud и PiterPy2024 — бесплатный день конференции для питонистов.
Ребята из K2 Cloud помогли организовать Community Day для python-разработчиков. 18 сентября ты сможешь бесплатно послушать часть докладов конференции PiterPy: от мастерства карьерного роста до хитростей асинхронного программирования. Для участия нужно только зарегистрироваться.
Подробнее на сайте
Создаем пакеты
Пакет в Python — это, грубо говоря, папка с другими папками и модулями. Помимо разделения частей проекта, пакеты нужны для формирования пространства имен, чтобы можно работать с пакетами и модулями через точку, как в примере выше.
При импорте вида from package import *
будет подключены либо все модули и объекты модуля __init__.py
, либо то, что находится в переменной __all__
в том же модуле __init__.py
— подробнее про эту переменную было в посте ранее.
Также примечателен файл init.py, который раньше был обязателен для создания пакетов. С версии Python 3.3 его необходимость пропала. Однако его функциональность на этом не заканчиваются.
#модули #пакеты
Добавляем классу большую функциональность
На прошлой неделе мы объясняли декоратор @classmethod
, а сейчас рассмотрим @staticmethod
. @staticmethod
можно воспринимать как метод, который "не знает, к какому классу относится". Он просто получает переданные аргументы, без неявного первого аргумента, и его определение не изменяется через наследование. Еще раз: статические методы прикреплены к классу лишь для удобства — и не могут менять состояние ни класса, ни его экземпляра.
Зачем использовать. Статические методы делают код более читабельным и повторно используемым. Его также удобнее использовать для импорта по сравнению с обычными функциями, поскольку функцию не нужно отдельно импортировать.
В чем же разница?@classmethod
используется в суперклассе для определения того, как метод должен вести себя, когда он вызывается разными дочерними классами. @staticmethod
используется, когда мы хотим вернуть объект, независимо от вызываемого дочернего класса.
Получение срезов итераторов
Если вы попытаетесь получить срез итератора, то столкнётесь с ошибкой TypeError, сообщающей о том, что на объект-генератор нельзя оформить подписку. Однако эта проблема поддаётся решению (см картинку).
Воспользовавшись методом itertools.islice, можно создать объект islice, который представляет собой итератор, выдающий нужные элементы. Однако здесь важно отметить то, что эта конструкция использует все элементы генератора вплоть до начала среза и все элементы в объекте islice.
#python
Упрощение создания операторов сравнения
Для создания объектов с поддержкой операторов сравнения в классе обычно требуется реализовать большое количество магических методов, а именно – __lt__
, __le__
, __eq__
, __ne__
, __gt__
, __ge__
.
Про то, что делает каждый из них расскажем отдельным постом, но сейчас покажем, как можно сильно упростить реализацию подобного класса. Для этого можно использовать декоратор total_ordering
из пакета functools
.
В таком случае достаточно реализовать в классе только __lt__
и __eq__
. Эти два метода являются минимумом, который нужен декоратору для конструирования остальных методов.
#классы
Отправляем универсальные уведомления
Наткнулся на интересный пакет notifiers, который позволяет отправлять уведомления на почту, через Телеграм бота, в Слэк и еще много куда. Всего доступно 16 провайдеров, подробнее про них в документации.
В функцию get_notifier передаем название провайдера в виде строки и получаем объект, с которым можно работать. Отправить уведомление можно с помощью универсального метода notify.
Если не уверены, какие аргументы нужно передать для отправки уведомления, то можете посмотреть их через атрибут required у созданного объекта.
Например, для Телеграма нужно передать токен бота, айди чата и само сообщение. В случае с почтой необходимо указать логин, пароль, адресата и также сообщение.
#уведомления #notifiers
Преобразования текста в аудио с помощью Python
Для преобразования текста в аудио на Python можно использовать библиотеку gTTS (Google Text-to-Speech).
В данном примере мы используем текст "Привет!» на русском языке, создаем объект gTTS и сохраняем аудиофайл "hello.mp3". Затем мы воспроизводим аудиофайл с помощью утилиты mpg321.
Стать сотрудником Яндекса быстрее и проще, чем кажется. Участвуйте в днях быстрого найма: решите тестовое, пройдите несколько секций собеседования и получите офер за несколько дней.
Ближайшие Fast Track мероприятия:
• 7-8 сентября — для аналитиков со знанием SQL и Python, офер за 2 дня в команды Маркета, Еды и Лавки.