en
Feedback
Python академия

Python академия

Open in Telegram

Учи Python быстро и легко. Ежедневно публикуем практические задачи, разборы, готовые решения, объяснения логики, советы по алгоритмам. ✔ Подходит для прокачки навыков кодирования. По всем вопросам @evgenycarter

Show more
7 293
Subscribers
-224 hours
-157 days
-3530 days
Posts Archive
Проверка наличия подстрок в строке списка А вот и задача, с которой многим приходится иметь дело ежедневно: проверять, есть л
Проверка наличия подстрок в строке списка А вот и задача, с которой многим приходится иметь дело ежедневно: проверять, есть ли в строке подстрока. В отличие от других языков программирования, в Python имеется для этого хорошее ключевое слово. Подписывайтесь на канал 👉@pythonofff

Элитные апартаменты в Сочи с доходом 6 млн ₽ в год! ⚡ Клубный комплекс элитных апартаментов расположенный в центральном Сочи
+9
Элитные апартаменты в Сочи с доходом 6 млн ₽ в год! ⚡ Клубный комплекс элитных апартаментов расположенный в центральном Сочи - от 28 до 350 м² - 5 мин до пляжа - Премиальная отделка с мебелью - Инфинити бассейн. Бар у бассейна. SPA - Спортплощадки. Ресторан - Салон красоты. Фитнес. Пруд с черепахами - Умный дом. Подземный паркинг - Консьерж-сервис. Панорамные окна ✅ Получите планировки и цены на сайте: Перейти на сайт #реклама mrqz.me О рекламодателе

Вычисление выражений Python Вы наверняка знакомы с eval, но знаете ли вы о literal_eval? Вряд ли. Для безопасного исполнения
Вычисление выражений Python Вы наверняка знакомы с eval, но знаете ли вы о literal_eval? Вряд ли. Для безопасного исполнения выражений, содержащих исключительно литералы, вы можете делать так, как показано на картинке выше. Между прочим, данная фича находится в языке уже очень давно. Подписывайтесь на канал 👉@pythonofff

🔍 match-case + dataclass: Python как mini-Pydantic Когда не хочется тащить Pydantic, но нужно элегантно валидировать и распарсить входящие данные — попробуй комбо match-case и dataclass. Красиво, просто, pythonic. Python 3.10+ принёс структурное сопоставление (match-case). В связке с dataclass можно описывать и валидировать структуру данных без лишней магии. Пример: простенький парсер события из словаря:

from dataclasses import dataclass
from typing import Any

@dataclass
class UserJoined:
    user_id: int
    room: str

@dataclass
class MessageSent:
    user_id: int
    message: str

def parse_event(event: dict[str, Any]) -> Any:
    match event:
        case {"type": "user_joined", "user_id": int(uid), "room": str(room)}:
            return UserJoined(uid, room)
        case {"type": "message_sent", "user_id": int(uid), "message": str(msg)}:
            return MessageSent(uid, msg)
        case _:
            raise ValueError("Unknown event type")

# Пример использования
raw = {"type": "message_sent", "user_id": 42, "message": "Привет!"}
event = parse_event(raw)
print(event)  # MessageSent(user_id=42, message='Привет!')
💡 Что происходит: - match проверяет структуру словаря и типы значений. - Если шаблон совпал, мы сразу вытаскиваем нужные поля. - dataclass делает остальное: хранение данных и авто-_repr_. Плюсы: - Не надо писать вручную if, try/except, dict.get(). - Простая и читабельная валидация без внешних зависимостей. - Работает из коробки, если у вас Python 3.10+. Минусы: - Без вложенных структур и сложных схем — не замена Pydantic, но хороший lightweight-вариант. Подписывайтесь на канал 👉@pythonofff

Форматирование строки Самые важные части кода — это входные данные, логика и выходные данные. Все три части требуют некоторог
Форматирование строки Самые важные части кода — это входные данные, логика и выходные данные. Все три части требуют некоторого форматирования при написании кода для получения лучших и более удобных для восприятия человеком выходных данных. В Python имеется целый ряд методов форматирования строки. Подписывайтесь на канал 👉@pythonofff

Сколько приложений нужно вашей команде для работы? Всего один сервис — Битрикс24! А внутри десятки инструментов для совместно
+7
Сколько приложений нужно вашей команде для работы? Всего один сервис — Битрикс24! А внутри десятки инструментов для совместной работы и бизнеса. Читайте подробнее в карточках. Регистрируйтесь сейчас, чтобы забрать их все себе бесплатно😊 Зарегистрироваться #реклама 16+ office-online.bitrix24.ru О рекламодателе

Not a Number В модуле math есть особый объект, который называется NaN (Not a Number). Эти объекты NaN не уникальны, и даже не
Not a Number В модуле math есть особый объект, который называется NaN (Not a Number). Эти объекты NaN не уникальны, и даже не равны самим себе, так что вы можете иметь несколько подобных объектов, взятых из нескольких разных источников. Например можно создать подобный объект, просто передав строку 'nan' во float. Кстати говоря, это значит что вы можете использовать NaN в качестве ключа в словаре (хотя мы и не советуем это делать). Подписывайтесь на канал 👉@pythonofff

Перехожу на Go: чего НЕ стоит делать? Приглашаем на бесплатный вебинар, где мы разберем ключевые ошибки и начнем писать Go-ко
Перехожу на Go: чего НЕ стоит делать? Приглашаем на бесплатный вебинар, где мы разберем ключевые ошибки и начнем писать Go-код правильно с самого начала. На встрече мы: 🔸 изучим особенности синтаксиса, нюансы concurrency, обработки ошибок и управления памятью в Go; 🔸 расскажем о типичных ловушках, с которыми сталкиваются разработчики при переходе из других языков; 🔸 покажем, как правильно использовать концепции языка и не сломать себе мозг, разбираясь с GOрутинами. Освоив эти принципы, вы сможете чувствовать себя увереннее в работе с Golang. Когда: 29 апреля в 19:00 📌 Занять место на вебе — через бота-помощника. erid: 2W5zFFwbK5a

Хранение в памяти При создании списка, в памяти резервируется пустая область. С одной стороны, это ничем не отличается от соз
Хранение в памяти При создании списка, в памяти резервируется пустая область. С одной стороны, это ничем не отличается от создания любого другого типа данных, но разница в том, что содержимое list может меняться Подписывайтесь на канал 👉@pythonofff

Будьте в курсе трендов корпоративных коммуникаций! 💰 Хотите знать, как сделать общение в команде эффективнее? Ищете способы
Будьте в курсе трендов корпоративных коммуникаций! 💰 Хотите знать, как сделать общение в команде эффективнее? Ищете способы оптимизировать рабочие процессы? ⚡ В канале VK WorkSpace делимся инсайтами о трендах коммуникаций, кейсами компаний, внедривших платформу, и анонсами новых сервисов для продуктивной работы в организациях любого масштаба — от стартапов до корпораций. ✅ Подписывайтесь и получайте приглашения на вебинары, где эксперты расскажут, как вывести командную работу на новый уровень! Подписаться #реклама 16+ О рекламодателе

Вычисляем размер объектов в памяти Чтобы вычислить размер какого-либо объекта, можно воспользоваться функцией sys.getsizeof(o
Вычисляем размер объектов в памяти Чтобы вычислить размер какого-либо объекта, можно воспользоваться функцией sys.getsizeof(object[, default]). Поскольку Python написан в полном соответствии с парадигмой ООП, таким объектом может быть все что угодно. Однако, следует помнить, что хотя все built-in (встроенные) объекты и вернут правильный размер, в общем случае это не должно быть верно для каких-либо пользовательских объектов. Аргумент default позволяет определить значение, которое будет возвращено, если тип объекта не предоставляет средства для извлечения размера и вызовет TypeError . Функция getsizeof вызывает метод __sizeof__ объекта и добавляет дополнительные служебные данные сборщика мусора, если конечно объект управляется сборщиком мусора. Подписывайтесь на канал 👉@pythonofff

Проверяем, присвоено ли значение переменной окружения Давайте создадим Python-файл со следующим скриптом для проверки перемен
Проверяем, присвоено ли значение переменной окружения Давайте создадим Python-файл со следующим скриптом для проверки переменных. Для чтения значений переменных мы используем модуль os, а модуль sys — для прекращения работы приложения. Бесконечный цикл while непрерывно принимает от пользователя имена переменных и проверяет их значения до тех пор, пока пользователь не введёт имя переменной, которой не присвоено значение. Если пользователь вводит имя переменной окружения, которой присвоено значение, это значение выводится, если же нет — выводится соответствующее сообщение и процесс останавливается. Подписывайтесь на канал 👉@pythonofff

Получи грант до 1,2 млн руб. на обучение в магистратуре Хочешь развиваться в сфере ИТ и получить фундаментальные знания с пра
Получи грант до 1,2 млн руб. на обучение в магистратуре Хочешь развиваться в сфере ИТ и получить фундаментальные знания с практикой? Поступай в магистратуру Центрального университета! - 4 офлайн программы по востребованным направлениям ИТ - Онлайн-программа по машинному обучению - 300 мест с грантами до 1,2 млн руб. - Вечерние занятия и учеба по выходным — удобно совмещать с работой - Обучение по модели STEM-образования: на стыке науки, технологий и бизнеса - Возможность стажировок и трудоустройства в ведущих компаниях - Государственный диплом за 2 года Магистратура в Центральном университете — это современный подход к образованию, сильный преподавательский состав и актуальные кейсы от индустрии. Оставляй заявку на грант уже сейчас! Подать заявку #реклама 16+ apply.centraluniversity.ru О рекламодателе

Explicit Conversion Flag Флаг явного преобразования используется для преобразования значения поля format перед его непосредст
Explicit Conversion Flag Флаг явного преобразования используется для преобразования значения поля format перед его непосредственным форматированием. Это поле можно использовать для переопределения поведения format для какого либо конкретного типа и форматирования значения. В настоящее время распространены два явных флага преобразования: !r – преобразует значение в строку, используя функцию repr() !s – преобразует значение в строку, используя функцию str() В примере, в случае с флагом !r строка 'Hello' будет напечатана с кавычками в поле шириной не менее 20 символов, а в случае с флагом !s – без кавычек (в более удобном для чтения виде). Подписывайтесь на канал 👉@pythonofff

⚙️Уже работаете с Rust, но хотите эффективно интегрировать его с другими языками? Или интересуетесь, как устроен процесс сбор
⚙️Уже работаете с Rust, но хотите эффективно интегрировать его с другими языками? Или интересуетесь, как устроен процесс сборки и линковки в этом языке? 🗓На открытом вебинаре 24 апреля в 20:00 мск мы подробно разберем, как собирать и линковать библиотеки в Rust, как использовать Rust-библиотеки в других языках, а также реализуем Си ABI (Application Binary Interface). Вы получите знания, которые помогут вам повысить производительность ваших проектов и интегрировать Rust в существующие решения. 👨‍💻Урок будет полезен всем, кто хочет углубить свои знания в Rust, повысить квалификацию и навыки работы с библиотеками и системами. Вы сможете применять полученные знания в реальных проектах. 👉Присоединяйтесь к открытому вебинару и получите скидку на большое обучение «Rust Developer. Professional»: https://vk.cc/cKZKKP Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

yield from — элегантная передача управления Если вы пишете генераторы, которые вызывают другие генераторы — забудьте про for x in sub(): yield x. Есть способ проще и мощнее. Оператор yield from позволяет передавать элементы из подгенератора напрямую, без лишнего кода. Но фишка не только в лаконичности — он также автоматически пробрасывает исключения и возвращаемые значения из подгенератора. Вот классика:

def gen():
    for x in range(3):
        yield x

def wrapper():
    for x in gen():
        yield x
Можно короче и лучше:

def wrapper():
    yield from gen()
Но главное — yield from пробрасывает return-значение из подгенератора (начиная с Python 3.3):

def sub():
    yield 1
    yield 2
    return 'done'

def main():
    result = yield from sub()
    print('Sub returned:', result)

for _ in main():
    pass
# Выведет: Sub returned: done
А ещё через yield from можно проксировать значения внутрь генератора — например, в сопрограммах:

def delegator():
    result = yield from coroutine()
    print('coroutine done:', result)

def coroutine():
    x = yield
    y = yield
    return x + y

g = delegator()
next(g)          # Старт
next(g)          # coroutine ждет x
g.send(10)       # x = 10
print(g.send(20))  # y = 20 → return 30
# Выведет: coroutine done: 30
Итог: если вы пишете генераторы — освоение yield from даст вам лаконичный синтаксис, проброс return-значений, исключений и взаимодействие на новом уровне. 👉@BookPython

Как создать базовый объект timedelta в Python Для начала давайте создадим базовый объект timedelta: Итак, мы успешно создали
Как создать базовый объект timedelta в Python Для начала давайте создадим базовый объект timedelta: Итак, мы успешно создали объект timedelta. Теперь нам нужно создать «эталонное» время, чтобы можно было применить созданный нами объект timedelta для выполнения каких-нибудь арифметических действий. Подписывайтесь на канал 👉@pythonofff

Татарская 35. Дом с видом на Кремль Третьяковская галерея и тихие переулки старой Москвы, купеческие особняки и древние храмы
Татарская 35. Дом с видом на Кремль Третьяковская галерея и тихие переулки старой Москвы, купеческие особняки и древние храмы, набережные канала и уютные кафе Пятницкой улицы. Всё это - домашний район для жителей ТАТАРСКОЙ 35. ТАТАРСКАЯ 35 - дом, у подножья которого все Замоскворечье, а из окон открываются виды на знаковые достопримечательности Москвы. Здесь есть собственный велнес-центр, 100 м2 клубной инфраструктуры для жителей и двор-сад 1,8 га. В доме представлены элитные квартиры, в том числе с авторской отделкой отделкой: итальянские кухни, европейская техника и сантехника, система "умный дом". Квартиры на ТАТАРСКОЙ 35 сейчас доступны с 0% рассрочкой от застройщика на 2,5 года. Узнать больше Проектная декларация на сайте https://наш.дом.рф/. Застройщик: ООО "СЗ "ПРАКТИКА" #реклама btatarskaya35.ru О рекламодателе

Ускоряем код с помощью векторизации Одним из приемов для ускорения работы циклов является векторизация вычислений, т. е. испо
Ускоряем код с помощью векторизации Одним из приемов для ускорения работы циклов является векторизация вычислений, т. е. использование функций, которые поддерживают операции над векторами. Вообще лучший способ ускорить любой цикл – это отказаться от него. В примере выше для работы с функцией my_func мы могли бы вызвать ее в цикле для каждого элемента списка, но гораздо проще использовать vectorize. По сути, vectorize преобразует функцию таким образом, что она начинает принимать весь вектор целиком, а не отдельный его элемент. Надо помнить, что такой подход не всегда приводит к значительному ускорению. Подписывайтесь на канал 👉@pythonofff

Присваиваем значение переменной окружения Для присвоения значения любой переменной среды используется функция setdefault(). Д
Присваиваем значение переменной окружения Для присвоения значения любой переменной среды используется функция setdefault(). Давайте напишем код, чтобы с помощью функции setdefault() изменить значение переменной DEBUG на True (по умолчанию установлено False). После установки значения мы проверим его функцией get(). Если мы сделали всё правильно, выведется сообщение «Режим отладки включен», в противном случае – «Режим отладки выключен». Подписывайтесь на канал 👉@pythonofff