Чем отличаются методы __str__() от __repr__() в Python и когда их принято использовать?
Методы __str__() и __repr__() в Python имеют разные цели и используются в различных контекстах.
Метод __str__() предназначен для создания понятного и удобного представления объекта, которое будет полезно конечному пользователю. В то время как __repr__() создает более формальное строковое представление, которое должно быть точным и однозначным, что позволяет воссоздать объект.
__repr__() часто используется в процессе отладки и разработки, так как его вывод должен быть максимально информативным. В отличие от него, __str__() ориентирован на предоставление более дружелюбного и менее детализированного представления объекта. Если метод __str__() не реализован, Python автоматически использует __repr__() в качестве альтернативы.
Библиотека собеса по Python
Метод __str__() предназначен для создания понятного и удобного представления объекта, которое будет полезно конечному пользователю. В то время как __repr__() создает более формальное строковое представление, которое должно быть точным и однозначным, что позволяет воссоздать объект.
__repr__() часто используется в процессе отладки и разработки, так как его вывод должен быть максимально информативным. В отличие от него, __str__() ориентирован на предоставление более дружелюбного и менее детализированного представления объекта. Если метод __str__() не реализован, Python автоматически использует __repr__() в качестве альтернативы.
Библиотека собеса по Python
❤4👍4
Объясни, как Django управляет транзакциями: autocommit, transaction.atomic() (savepoint’ы и «broken» состояние), ATOMIC_REQUESTS, когда нужен select_for_update(), и что учитывать с CONN_MAX_AGE/PgBouncer.
По умолчанию autocommit: каждый ORM-запрос, меняющий БД, — своя транзакция. atomic() начинает транзакцию (или создаёт savepoint при вложенности); исключение помечает блок как broken → откат до ближайшего savepoint/транзакции; при выходе — commit или rollback. ATOMIC_REQUESTS=True автоматически оборачивает view, но может растягивать транзакции (долгие I/O, внешние вызовы) — применять выборочно. select_for_update() требует активной транзакции (atomic()), в Postgres можно nowait/skip_locked для борьбы с блокировками. Изоляция — та, что у БД (обычно READ COMMITTED). Соединения: CONN_MAX_AGE удерживает их открытыми; в проде обычно PgBouncer (session/transaction mode), следи за совместимостью с server-side курсорами и длительными транзакциями.
Библиотека собеса по Python
Библиотека собеса по Python
👍2
Как вычислить среднее значение, медиану, моду, дисперсию, стандартное отклонение и различные квантильные диапазоны в Pandas?
✔️ DataFrame.mean(): среднее
✔️ DataFrame.median(): медиана
✔️ DataFrame.mode(): мода
✔️ DataFrame.var(): дисперсия
✔️ DataFrame.std(): стандартное отклонение
✔️ DataFrame.quantile(): для расчета квантильного диапазона, используя значение диапазона в качестве параметра
Библиотека собеса по Python
✔️ DataFrame.median(): медиана
✔️ DataFrame.mode(): мода
✔️ DataFrame.var(): дисперсия
✔️ DataFrame.std(): стандартное отклонение
✔️ DataFrame.quantile(): для расчета квантильного диапазона, используя значение диапазона в качестве параметра
Библиотека собеса по Python
👍4
Что такое подгенератор (subgenerator)?
Подгенератор создается с помощью конструкции yield from внутри генератора.
Использование подгенераторов позволяет разбить генератор на несколько частей для упрощения кода и оптимизации памяти. Это полезный инструмент при работе с последовательностями.
Механизм передает значения между генераторами без сохранения всей последовательности в памяти и блокирует основной генератор до полного завершения подгенератора.
Библиотека собеса по Python
Использование подгенераторов позволяет разбить генератор на несколько частей для упрощения кода и оптимизации памяти. Это полезный инструмент при работе с последовательностями.
Механизм передает значения между генераторами без сохранения всей последовательности в памяти и блокирует основной генератор до полного завершения подгенератора.
Библиотека собеса по Python
👍5❤1
Почему @dataclass(eq=True) без frozen по умолчанию не хэшируем?
Потому что при наличии __eq__ и изменяемости нарушается инвариант хэша; Python выставляет __hash__ = None. Нужно либо frozen=True (тогда хэш генерится), либо явно определить __hash__/использовать unsafe_hash=True на свой риск.
Библиотека собеса по Python
Библиотека собеса по Python
👍2
⏳ Время прокачать алгоритмы с 40-процентной скидкой до конца октября
На собеседовании не просят бездумно написать шаблонное решение. Важно понимать, как работают алгоритмы под капотом.
🔹 В курсе ты научишься:
— искать ошибки с помощью редакционного расстояния;
— работать с балансированными деревьями и графами;
— решать задачи с динамическим программированием;
— и многое другое, что пригодится на собеседованиях.
🤔 Решаешь задачи только в тг каналах? Пройди курс и отправляйся на реальные собеседования!
🔗 Подробнее о курсе
На собеседовании не просят бездумно написать шаблонное решение. Важно понимать, как работают алгоритмы под капотом.
🔹 В курсе ты научишься:
— искать ошибки с помощью редакционного расстояния;
— работать с балансированными деревьями и графами;
— решать задачи с динамическим программированием;
— и многое другое, что пригодится на собеседованиях.
🤔 Решаешь задачи только в тг каналах? Пройди курс и отправляйся на реальные собеседования!
🔗 Подробнее о курсе
Что такое категориальные данные и как они представлены в Pandas?
Категориальные данные — это набор предопределенных значений данных в некоторых категориях. Обычно они имеют ограниченный и фиксированный диапазон возможных значений и могут быть как числовыми, так и текстовыми по своей природе. Несколько примеров категориальных данных — пол, образовательная квалификация, группа крови, принадлежность к стране, время наблюдения и т. д. В Pandas категориальные данные часто представлены типом данных Object.
Библиотека собеса по Python
Библиотека собеса по Python
👍1
✍️ Как функционирует метод __new__() в Python?
Метод __new__() отвечает за создание нового экземпляра класса, выделяя для него память. Он вызывается перед методом __init__(), который занимается инициализацией уже созданного экземпляра. Это особенно важно при работе с неизменяемыми типами, такими как str или int, а также в ситуациях, когда необходимо контролировать процесс создания объекта, например, при использовании паттерна Singleton.
Библиотека собеса по Python
Библиотека собеса по Python
👍1
Чем «data»-дескриптор отличается от «non-data», как это влияет на порядок поиска атрибута, и почему @property — это тоже дескриптор?
В Python любой объект с __get__ — дескриптор.
Non-data дескриптор: имеет только __get__. Проигрывает записи в obj.__dict__. @property — именно non-data дескриптор.
Data дескриптор: имеет __set__ и/или __delete__. Имеет приоритет над obj.__dict__, блокируя прямую подмену.
Порядок разрешения атрибутов (__getattribute__): data-descriptor → obj.__dict__ → non-data descriptor/атрибут класса → __getattr__.
Пишите свой data-дескриптор для переиспользуемой логики: валидация, типизация, lazy/кэш, связка с внешними ресурсами.
Библиотека собеса по Python
Non-data дескриптор: имеет только __get__. Проигрывает записи в obj.__dict__.
Data дескриптор: имеет __set__ и/или __delete__. Имеет приоритет над obj.__dict__, блокируя прямую подмену.
Порядок разрешения атрибутов (__getattribute__): data-descriptor → obj.__dict__ → non-data descriptor/атрибут класса → __getattr__.
Пишите свой data-дескриптор для переиспользуемой логики: валидация, типизация, lazy/кэш, связка с внешними ресурсами.
Библиотека собеса по Python
👍1
Что такое GIL в CPython, как он влияет на многопоточность, и какие практики выбирать для CPU-bound и I/O-bound задач?
GIL — глобальная блокировка интерпретатора в CPython: одновременно байткод исполняет только один поток.
CPU-bound: потоки не масштабируются по ядрам → берите процессы (multiprocessing/процесс-пулы), векторизацию/библиотеки, которые освобождают GIL (напр. NumPy), нативные расширения или вынос в отдельные сервисы.
I/O-bound: потоки подходят (блокирующие I/O обычно отпускают GIL); альтернативно — asyncio с неблокирующими вызовами.
Важно: asyncio не ускоряет CPU-bound; смешивайте — тяжёлое CPU выносите в процессы/С, блокирующее I/O — в пул потоков; измеряйте и следите, чтобы в async-код не просачивались блокировки.
Имплементации: поведение касается CPython; в других реализациях Python механизм отличается.
Библиотека собеса по Python
CPU-bound: потоки не масштабируются по ядрам → берите процессы (multiprocessing/процесс-пулы), векторизацию/библиотеки, которые освобождают GIL (напр. NumPy), нативные расширения или вынос в отдельные сервисы.
I/O-bound: потоки подходят (блокирующие I/O обычно отпускают GIL); альтернативно — asyncio с неблокирующими вызовами.
Важно: asyncio не ускоряет CPU-bound; смешивайте — тяжёлое CPU выносите в процессы/С, блокирующее I/O — в пул потоков; измеряйте и следите, чтобы в async-код не просачивались блокировки.
Имплементации: поведение касается CPython; в других реализациях Python механизм отличается.
Библиотека собеса по Python
👍5
Изучаете Python и уже чувствуете себя уверенно? Хотите проверить навыки и знания? Тогда приглашаем на бесплатный мини-курс «Python для всех»!
Курс состоит из практики чуть менее чем полностью. За 4 дня вы создадите 4 проекта:
1️⃣ Бота для Telegram, который умеет переводить голос в текст
2️⃣ Бота для Telegram, который обрабатывает фотографии
3️⃣ Парсер, который извлекает данные с сайтов
4️⃣ Веб-сайт (с помощью фреймворка Flask)
В общем, прокачаете навыки и наверняка узнаете что-то новое.
Регистрируйтесь: https://epic.st/G-GOW?erid=2Vtzqw1A9t1
🎁 А ещё всех участников ждёт бонус: откроем доступ к конференции по нейросетям после первого урока. Узнаете, как использовать ИИ в работе и жизни.
Курс состоит из практики чуть менее чем полностью. За 4 дня вы создадите 4 проекта:
1️⃣ Бота для Telegram, который умеет переводить голос в текст
2️⃣ Бота для Telegram, который обрабатывает фотографии
3️⃣ Парсер, который извлекает данные с сайтов
4️⃣ Веб-сайт (с помощью фреймворка Flask)
В общем, прокачаете навыки и наверняка узнаете что-то новое.
Регистрируйтесь: https://epic.st/G-GOW?erid=2Vtzqw1A9t1
🎁 А ещё всех участников ждёт бонус: откроем доступ к конференции по нейросетям после первого урока. Узнаете, как использовать ИИ в работе и жизни.
👍1
Какой метод использовался до оператора in для проверки наличия ключа в словаре?
До появления оператора in в Python, чтобы проверить, содержит ли словарь определенный ключ, использовался метод словаря has_key().
Этот метод принимал в качестве аргумента проверяемый ключ и возвращал логическое значение - True, если ключ присутствовал в словаре, и False - если нет.
В Python 2.5 появился более понятный и краткий оператор in, поэтому сейчас рекомендуется использовать именно его, а has_key() считается устаревшим.
Библиотека собеса по Python
Этот метод принимал в качестве аргумента проверяемый ключ и возвращал логическое значение - True, если ключ присутствовал в словаре, и False - если нет.
В Python 2.5 появился более понятный и краткий оператор in, поэтому сейчас рекомендуется использовать именно его, а has_key() считается устаревшим.
Библиотека собеса по Python
👍8
💡 Задача с собесеседования
Недавно в одном известном всем банке кандидату была предложена задача:
Вероятности, распределения, матожидание, градиенты — всё это может всплыть на интервью, и даже в продовых задачах.
🎓 Proglib запускает экспресс-курс «Математика для Data Science» — для тех, кто хочет закрыть эти пробелы и понять математику быстро, качественно и без боли.
🔍 На курсе вас ждет:
— линейная алгебра, анализ, теория вероятности и статистика;
— градиенты, матрицы и экстремумы функций;
— математики и алгоритмы машинного обучения;
— много практики.
📅 Старт: 6 ноября
⏰ Формат: 10 вебинаров и 3 практических проекта
💬 Поддержка: менторы + Telegram-чат
💰 Стоимость: 37 000 ₽ (есть рассрочка)
🔗 Узнать больше и записаться
Недавно в одном известном всем банке кандидату была предложена задача:
Есть клиент, который за месяц делает 1000 транзакций.
Нужно посчитать вероятность того, что среди них окажется хотя бы одна дублирующаяся сумма, если каждая сумма округляется до 2 знаков после запятой.
Вероятности, распределения, матожидание, градиенты — всё это может всплыть на интервью, и даже в продовых задачах.
🎓 Proglib запускает экспресс-курс «Математика для Data Science» — для тех, кто хочет закрыть эти пробелы и понять математику быстро, качественно и без боли.
🔍 На курсе вас ждет:
— линейная алгебра, анализ, теория вероятности и статистика;
— градиенты, матрицы и экстремумы функций;
— математики и алгоритмы машинного обучения;
— много практики.
📅 Старт: 6 ноября
⏰ Формат: 10 вебинаров и 3 практических проекта
💬 Поддержка: менторы + Telegram-чат
💰 Стоимость: 37 000 ₽ (есть рассрочка)
🔗 Узнать больше и записаться
Каковы способы настройки функциональности интерфейса администратора Django?
Существует несколько способов настройки функциональности интерфейса администратора Django. Вы можете использовать форму добавления/изменения, которая автоматически генерируется Django, вы можете добавлять модули JavaScript с помощью параметра js. Этот параметр в основном представляет собой список URL-адресов, указывающих на модули JavaScript, которые должны быть включены в ваш проект в теге <script>. Вы также можете написать представления для администратора, если хотите. Хотите глубже изучить основы Python? Добро пожаловать на курс: https://proglib.academy/python
Библиотека собеса по Python
Библиотека собеса по Python
😵💫 Устал от бесконечной подготовки к собесам?
Тогда залетай к нам, есть задачка попроще.
Пройди в нашем боте мини-тест по математике и узнай, готов ли ты к Data Science или стоит что-то подтянуть.
📱 Перейти в бота
Тогда залетай к нам, есть задачка попроще.
Пройди в нашем боте мини-тест по математике и узнай, готов ли ты к Data Science или стоит что-то подтянуть.
📱 Перейти в бота
❤1👍1
Как вы спроектируете высоконагруженный API на Django/DRF с P99 < 50 мс при 10k rps, строгой согласованностью кэша при записи и нулевым простоем при деплоях?
ASGI-стек (Uvicorn+Gunicorn), асинхронные вьюхи только для I/O; БД: pgbouncer, целевые индексы/covering, устранение N+1 (select_related/prefetch_related), атомарные операции через F() и при необходимости SELECT … FOR UPDATE, критичные места — raw SQL; чтение через реплики с роутерами, для ускорения — CQRS: read-модель (материализованные представления/Redis). Кэш как cache-aside в Redis с версионированием ключей; инвалидация не сигналами, а outbox-паттерном: запись события в таблицу → Celery-консюмер инвалидирует/перестраивает кэш; для публичных GET — ETag/Last-Modified и CDN. Миграции без простоя по схеме expand→migrate data→contract, индексы CONCURRENTLY, деплой blue/green; задачи — Celery/RQ, идемпотентность через ключи, ретраи с backoff. Наблюдаемость: APM, slow query log, профилинг N+1, метрики p95/p99; безопасность: строгие SECURE_*, CSRF, rate limiting в DRF/Reverse-proxy; логи — stdout.
Библиотека собеса по Python
Библиотека собеса по Python
👍5🥱1
🔥 Новый курс «Математика для Data Science»
Записывайтесь до 19.10 и получите бонус-курс «Школьная математика» для быстрого освежения знаний! 🚀
🧠 Эксперты-спикеры на курсе:
▫️ Диана Миронидис — преподаватель ВШЭ, автор Яндекс Практикума;
▫️ Ксения Кондаурова — преподаватель Центрального Университета (Т-Банк);
▫️ Маргарита Бурова — академический руководитель программ Wildberries & Russ.
👉🏻 Не упустите шанс улучшить свои навыки
Записывайтесь до 19.10 и получите бонус-курс «Школьная математика» для быстрого освежения знаний! 🚀
🧠 Эксперты-спикеры на курсе:
▫️ Диана Миронидис — преподаватель ВШЭ, автор Яндекс Практикума;
▫️ Ксения Кондаурова — преподаватель Центрального Университета (Т-Банк);
▫️ Маргарита Бурова — академический руководитель программ Wildberries & Russ.
👉🏻 Не упустите шанс улучшить свои навыки
👍1
Какие существуют различные стили наследования моделей в Django?
Django поддерживает 3 типа наследования. Это абстрактные базовые классы, многотабличное наследование и прокси-модели.
Библиотека собеса по Python
Библиотека собеса по Python
👍3