Python | Вопросы собесов
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv
Show more📈 Analytical overview of Telegram channel Python | Вопросы собесов
Channel Python | Вопросы собесов (@python_easy_ru) in the Russian language segment is an active participant. Currently, the community unites 12 809 subscribers, ranking 9 639 in the Technologies & Applications category and 50 763 in the Russia region.
📊 Audience metrics and dynamics
Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 12 809 subscribers.
According to the latest data from 25 August, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -108 over the last 30 days and by 0 over the last 24 hours, overall reach remains high.
- Verification status: Not verified
- Engagement rate (ER): The average audience engagement rate is 6.52%. Within the first 24 hours after publication, content typically collects 4.36% reactions from the total number of subscribers.
- Post reach: On average, each post receives 835 views. Within the first day, a publication typically gains 559 views.
- Reactions and interaction: The audience actively supports content: the average number of reactions per post is 2.
- Thematic interests: Content is focused on key topics such as ставь, модуль, строка, docker, alice.
📝 Description and content policy
The author describes the resource as a platform for expressing subjective opinions:
“Сайт: https://easyoffer.ru/
Все каналы: t.me/+xGeAw6ckJ4liYzQy
Контакт для рекламы: @easyoffer_adv”
Thanks to the high frequency of updates (latest data received on 26 August, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.
import time
start = time.time()
s = 0
for i in range(10_000_000):
s += i
end = time.time()
print("Python:", end - start, "сек")
Результат
Python: 0.8 секC++ (быстро)
#include <iostream>
#include <chrono>
int main() {
auto start = std::chrono::high_resolution_clock::now();
long long s = 0;
for (int i = 0; i < 10000000; i++) {
s += i;
}
auto end = std::chrono::high_resolution_clock::now();
std::cout << "C++: "
<< std::chrono::duration<double>(end - start).count()
<< " сек" << std::endl;
}
Результат
C++: 0.05 сек🚩3. Когда Python может быть быстрее? 🟠Если используются сторонние библиотеки (NumPy, Pandas, TensorFlow) Они написаны на C/C++ и работают очень быстро. Пример:
numpy.sum(arr) быстрее, чем sum(list), потому что работает на C.
🟠Разработка в Python быстрее (меньше кода, проще отладка)
Python код пишется в 2-5 раз быстрее, чем C++. Важно для стартапов и прототипов.
🟠Python лучше для обработки текста, веб-разработки, автоматизации
Например, парсинг HTML, обработка логов, работа с API.
🚩Когда C++ лучше?
🟠 Высокая производительность (игры, 3D, движки)
Игры, графика (Unreal Engine, Unity, CryEngine). Разработка операционных систем (Windows, Linux).
🟠Алгоритмы и математика (С++ быстрее Python в 10-100 раз)
Быстрая обработка данных, алгоритмы (sorting, graph, machine learning). Например, если нужно перемножить матрицы размером 10 000 × 10 000, C++ справится в разы быстрее.
🟠Работа с железом (Embedded, драйверы, робототехника)
Python слишком медленный для реального времени, а C++ используется в Arduino, автопилотах, микроконтроллерах.
Ставь 👍 и забирай 📚 Базу знаний+, -, *, and, or, not и т. д.) сами по себе не являются объектами. Они — часть синтаксиса языка и не имеют представления в виде объектов в памяти.
a = 10 + 5 # Оператор "+" выполняет сложение, но сам по себе не объект
print(type(+)) # Ошибка: нельзя получить тип оператора
🟠Ключевые слова (keywords)
Встроенные ключевые слова Python (if, else, while, for, def, class, return и т. д.) не являются объектами. Они зарезервированы интерпретатором и используются для управления потоком выполнения кода.
print(type(if)) # Ошибка: ключевое слово не является объектом
🟠Идентификаторы переменных
Хотя переменные ссылаются на объекты, сами идентификаторы (имена переменных) — это просто ссылки, а не объекты.
x = 42 # x — это имя, а не объект
print(type(x)) # Это целое число, но само имя "x" объектом не является
🟠Аннотации типов во время компиляции
Аннотации типов в Python, такие как list[str], не создают объекты во время компиляции кода. Они интерпретируются только на уровне анализа типов.
def func(x: int) -> str:
return str(x)
Ставь 👍 и забирай 📚 Базу знанийБаза данных (company_db) ├── Схема: public (по умолчанию) │ ├── Таблица: employees │ ├── Таблица: departments ├── Схема: hr │ ├── Таблица: employees │ ├── Таблица: salaries ├── Схема: sales │ ├── Таблица: customers │ ├── Таблица: orders🚩Как создавать и использовать схемы? Создание схемы (
CREATE SCHEMA)
CREATE SCHEMA hr; -- Создаём схему "hr"
Создание таблицы внутри схемы
CREATE TABLE hr.employees (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
position VARCHAR(50)
);
Выбор схемы по умолчанию
SET search_path TO hr;
🚩Где полезны схемы?
🟠Разделение данных по модулям
Если в БД хранятся разные области бизнеса (кадры, продажи, финансы), их можно разделить по схемам:
- hr.employees, hr.salaries
- sales.orders, sales.customers
🟠Разные версии одной БД
Например, в PostgreSQL можно создать схему dev для тестов:
- dev.users — тестовая версия таблицы
- prod.users — продакшен-версия
🟠Безопасность и доступ пользователей
Можно дать доступ к разным схемам разным пользователям:
GRANT USAGE ON SCHEMA hr TO hr_manager;
GRANT SELECT ON ALL TABLES IN SCHEMA hr TO hr_manager;
Ставь 👍 и забирай 📚 Базу знанийBaseExceptionGroup и ExceptionGroup. Эти классы решают проблему одновременной обработки нескольких исключений, которые могут возникать в сложных ситуациях, таких как асинхронное программирование, многопоточность или обработка нескольких связанных ошибок. Давайте разберем, зачем они нужны, как их использовать и какие преимущества они дают.
🚩Зачем нужны `BaseExceptionGroup` и `ExceptionGroup`?
Ранее в Python было возможно выбросить только одно исключение за раз, и обработка нескольких исключений одновременно требовала сложного и неочевидного кода. Например:
При работе с асинхронными функциями или потоками может возникнуть сразу несколько ошибок, и их нужно корректно обработать.
В больших приложениях или библиотеках (например, при работе с asyncio) может быть необходимость передать сразу несколько исключений, которые произошли в разных местах, как единый объект.
BaseExceptionGroup и его подкласс ExceptionGroup позволяют группировать несколько исключений и выбрасывать их вместе в виде одного объекта. Это делает код более читаемым, упрощает обработку и исключает необходимость ручной агрегации ошибок.
🚩Разница между `BaseExceptionGroup` и `ExceptionGroup`
BaseExceptionGroup - это базовый класс для группировки исключений. Он наследуется от BaseException и, как правило, не используется напрямую.
ExceptionGroup - это подкласс, который наследуется от Exception. Этот класс используется для обработки групп исключений, которые возникают при обычных ошибках в коде (не фатальных).
🚩Как они работают?
Классы исключений BaseExceptionGroup и ExceptionGroup позволяют создать "группу исключений", которая содержит несколько отдельных исключений. Это полезно, когда вам нужно:
Указать несколько ошибок одновременно.
Позволить обработчику исключений работать с каждым из них.
def task_1():
raise ValueError("Ошибка в задаче 1")
def task_2():
raise TypeError("Ошибка в задаче 2")
try:
# Создаем группу исключений
raise ExceptionGroup(
"Ошибки в задачах",
[ValueError("Ошибка в задаче 1"), TypeError("Ошибка в задаче 2")]
)
except ExceptionGroup as eg:
for exc in eg.exceptions:
print(f"Обнаружено исключение: {exc}")
Результат
Обнаружено исключение: Ошибка в задаче 1 Обнаружено исключение: Ошибка в задаче 2🚩Обработка групп исключений При обработке
ExceptionGroup можно использовать механизм фильтрации с помощью конструкции except*. Это нововведение в Python 3.11 позволяет обрабатывать разные типы исключений внутри группы по-разному.
try:
raise ExceptionGroup(
"Ошибки в задачах",
[ValueError("Ошибка 1"), TypeError("Ошибка 2"), ValueError("Ошибка 3")]
)
except* ValueError as ve:
print("Обрабатываем ValueError:", ve)
except* TypeError as te:
print("Обрабатываем TypeError:", te)
Результат
Обрабатываем ValueError: Ошибка 1 Обрабатываем ValueError: Ошибка 3 Обрабатываем TypeError: Ошибка 2🚩Преимущества использования ➕Работа с несколькими исключениями одновременно. Вы можете объединить связанные ошибки и передать их в одном объекте. ➕Четкое разграничение типов исключений. Использование
except* позволяет обработать каждое исключение из группы отдельно, не теряя гибкости.
➕Удобство при асинхронном программировании.
В асинхронных задачах (asyncio) часто возникает несколько ошибок одновременно, и их можно группировать для дальнейшей обработки.
➕Упрощение сложной логики.
Код становится проще и понятнее, так как не нужно вручную собирать и разбирать исключения.
🚩Когда использовать?
Когда вы работаете с несколькими задачами, которые могут порождать ошибки одновременно (например, асинхронный код).
Когда вы хотите сообщить о нескольких связанных ошибках, не выбрасывая каждую из них отдельно.
Когда требуется раздельная обработка разных типов ошибок.
Ставь 👍 и забирай 📚 Базу знанийgit stash — это команда в Git, которая сохраняет незакоммиченные изменения во временное хранилище (stash) и очищает рабочую директорию.
🚩Когда это полезно?
Нужно переключиться на другую ветку, но есть незаконченные изменения. Хочешь сохранить текущую работу, но не коммитить её. Нужно экспериментировать, но без риска потерять код.
🚩Как использовать `git stash`?
Сохранить изменения в stash
git stash
Посмотреть список сохранённых изменений
git stash list
Выведет список всех stash-ов
stash@{0}: WIP on main: 1234567 Добавил новую фичу
stash@{1}: WIP on dev: 89abcde Исправил баг
Восстановить сохранённые изменения
git stash pop # Восстановит изменения и удалит stash
ИЛИ
git stash apply # Восстановит, но stash останется в списке
Удалить stash после применения
git stash drop stash@{0} # Удалит конкретный stash
git stash clear # Удалит все stash'и
🚩Пример использования
Сценарий
- Ты работаешь в ветке main, но нужно срочно переключиться на dev.
- У тебя есть изменения, которые ты не хочешь коммитить.
Решение
git stash # Сохраняем изменения
git checkout dev # Переключаемся на другую ветку
# Делаем нужную работу...
git checkout main # Возвращаемся в основную ветку
git stash pop # Восстанавливаем изменения
Ставь 👍 и забирай 📚 Базу знаний+, -, *, and, or, not и т. д.) сами по себе не являются объектами. Они — часть синтаксиса языка и не имеют представления в виде объектов в памяти.
a = 10 + 5 # Оператор "+" выполняет сложение, но сам по себе не объект
print(type(+)) # Ошибка: нельзя получить тип оператора
🟠Ключевые слова (keywords)
Встроенные ключевые слова Python (if, else, while, for, def, class, return и т. д.) не являются объектами. Они зарезервированы интерпретатором и используются для управления потоком выполнения кода.
print(type(if)) # Ошибка: ключевое слово не является объектом
🟠Идентификаторы переменных
Хотя переменные ссылаются на объекты, сами идентификаторы (имена переменных) — это просто ссылки, а не объекты.
x = 42 # x — это имя, а не объект
print(type(x)) # Это целое число, но само имя "x" объектом не является
🟠Аннотации типов во время компиляции
Аннотации типов в Python, такие как list[str], не создают объекты во время компиляции кода. Они интерпретируются только на уровне анализа типов.
def func(x: int) -> str:
return str(x)
Ставь 👍 и забирай 📚 Базу знаний