и посмотреть медиа
Python Interview Questions - tests
и посмотреть медиа
Questions, tests and tasks for Python interviews.
Questions, tests and tasks for Python interviews.
AI bot for text-to-speech and voice cloning in Telegram. Create audio using neural network quickly and easily.
Channel with questions for Python interviews. Tests, tasks and materials for preparation.
🤔 В чём разница между decimal и float? - float — тип с плавающей точкой, быстрый, но подвержен ошибкам округления из-за бинарного представления. Например: 0.1 + 0.2 != 0.3. - decimal.Decimal — тип из модуля decimal, который сохраняет точность десятичных дробей и идеально подходит для финансовых и бухгалтерских расчётов. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Что такое обработка исключений? Обработка исключений — это механизм в программировании, который позволяет предотвращать аварийное завершение программы, если во время выполнения возникает ошибка. Вместо того чтобы программа просто "упала", обработка исключений дает возможность перехватить ошибку и обработать её безопасным способом. 🚩Почему это нужно? В реальном коде ошибки неизбежны: деление на ноль (ZeroDivisionError), обращение к несуществующему индексу (IndexError), работа с несуществующим файлом (FileNotFoundError) и т. д. 🚩Как это работает? В Python для обработки исключений используется конструкция try-except. Обработка деления на ноль try: x = 10 / 0 # Ошибка: деление на ноль except ZeroDivisionError: print("Ошибка! Деление на ноль невозможно.") Результат: вместо аварийного завершения программы мы получаем сообщение Ошибка! Деление на ноль невозможно. Обработка нескольких типов исключений try: num = int(input("Введите число: ")) # Возможна ошибка ValueError result = 10 / num # Возможна ошибка ZeroDivisionError except ZeroDivisionError: print("Ошибка! Деление на ноль.") except ValueError: print("Ошибка! Введите число.") Если пользователь введет "abc", программа не завершится с ошибкой, а выведет Ошибка! Введите число. Использование finally (код, который выполняется всегда) try: file = open("data.txt", "r") # Возможна ошибка FileNotFoundError content = file.read() except FileNotFoundError: print("Файл не найден!") finally: print("Программа завершена.") # Выполнится в любом случае Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Зачем нужны классы BaseExceptionGroup и ExceptionGroup? В Python 3.11 были добавлены новые классы исключений 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) часто возникает несколько ошибок одновременно, и их можно группировать для дальнейшей обработки. ➕Упрощение сложной логики. Код становится проще и понятнее, так как не нужно вручную собирать и разбирать исключения. 🚩Когда использовать? Когда вы работаете с несколькими задачами, которые могут порождать ошибки одновременно (например, асинхронный код). Когда вы хотите сообщить о нескольких связанных ошибках, не выбрасывая каждую из них отдельно. Когда требуется раздельная обработка разных типов ошибок. Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Чем отличается Docker от виртуальной машины? - Docker использует контейнеры и общую ОС-хоста. Легче, быстрее, меньше оверхед. - ВМ запускает полноценную ОС с ядром. Изолированнее, но ресурсоёмко. Docker лучше для CI/CD, микросервисов и быстрого развертывания. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Что такое оконные функции? Оконные функции (window functions) — это специальные функции в SQL, которые выполняют вычисления по строкам внутри "окна" (группы строк), но не агрегируют их. SELECT id, месяц, продавец, сумма, SUM(сумма) OVER (PARTITION BY месяц) AS общий_доход_в_месяц FROM sales; 🟠`ROW_NUMBER()` – Нумерация строк Пронумеруем продажи каждого продавца в порядке убывания суммы. SELECT id, продавец, сумма, ROW_NUMBER() OVER (PARTITION BY продавец ORDER BY сумма DESC) AS номер FROM sales; 🟠`RANK()` и `DENSE_RANK()` – Рейтинг с учётом одинаковых значений Если два продавца получили одинаковую сумму, RANK() пропустит следующий номер, а DENSE_RANK() – нет. SELECT продавец, сумма, RANK() OVER (ORDER BY сумма DESC) AS ранг_1, DENSE_RANK() OVER (ORDER BY сумма DESC) AS ранг_2 FROM sales; 🟠3. `LAG()` и `LEAD()` – Доступ к предыдущей и следующей строке LAG() даёт предыдущее значение, LEAD() – следующее. SELECT месяц, продавец, сумма, LAG(сумма) OVER (PARTITION BY продавец ORDER BY месяц) AS предыдущий_месяц, LEAD(сумма) OVER (PARTITION BY продавец ORDER BY месяц) AS следующий_месяц FROM sales; 🟠Использование оконных функций с `FRAME` (ограничение окна) Иногда нужно анализировать не всю группу, а только несколько соседних строк. SELECT месяц, продавец, сумма, AVG(сумма) OVER (PARTITION BY продавец ORDER BY месяц ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS скользящее_среднее FROM sales; Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Как сделать package? Пакет в Python — это папка, содержащая файл __init__.py, который указывает, что она является модулем. Внутри пакета могут находиться другие модули или подпакеты. Это позволяет удобно структурировать код по функциональным блокам и импортировать нужные части. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Что такое хешируемые типы данных? Это такие типы данных, которые имеют постоянное (неизменяемое) хеш-значение на протяжении всего времени их существования. Это означает, что их можно использовать в качестве ключей в словарях (dict) и элементов в множествах (set), так как они поддерживают вычисление хеша с помощью функции hash(). 🚩Как понять, что объект хешируемый? 🟠Объект должен быть неизменяемым если объект можно изменить после создания, его хеш тоже изменится, что нарушает работу структур данных (словари, множества). 🟠Должен реализовывать метод `__hash__()` который возвращает уникальный идентификатор объекта. 🚩Какие типы данных хешируемые? Числа (int, float, complex) print(hash(42)) # 42 print(hash(3.14)) # 322818021289917443 print(hash(1 + 2j)) # 8389048192121911274 Строки (str) print(hash("hello")) # Например, 5320385861927423548 Кортежи (tuple), если все их элементы тоже хешируемые: print(hash((1, 2, 3))) # 529344067295497451 Булевы значения (bool): print(hash(True)) # 1 print(hash(False)) # 0 🚩Какие типы НЕ хешируемые? Списки (list) hash([1, 2, 3]) # TypeError: unhashable type: 'list' Множества (set) hash({1, 2, 3}) # TypeError: unhashable type: 'set' Словари (dict) hash({"a": 1}) # TypeError: unhashable type: 'dict' 🚩Почему это важно? Хешируемые типы используются в словари (dict) и множества (set), так как они используют хеш-функцию для быстрого поиска данных. my_dict = { (1, 2, 3): "tuple_key" } # Работает, потому что кортеж неизменяемый my_set = { 42, "hello", (1, 2) } # Все элементы хешируемые Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Что такое оконные функции? Оконные функции — это агрегатные функции, которые применяются к строкам в пределах окна, не группируя их. Например: сумма по группе, но каждая строка остаётся на месте. Работают вместе с OVER(), PARTITION BY, ORDER BY. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Как выбрать данные из двух таблиц без метода join()? В SQL можно объединять данные из двух таблиц без использования JOIN, используя альтернативные методы. 🚩Использование подзапросов (`SELECT` внутри `SELECT`) Подзапрос (subquery) позволяет выбрать данные из одной таблицы, используя данные из другой. Допустим, у нас есть две таблицы: employees (id, name, department_id) departments (id, name) SELECT name, (SELECT name FROM departments WHERE id = employees.department_id) AS department_name FROM employees; 🚩Использование `IN` или `EXISTS` Можно фильтровать данные из одной таблицы, проверяя наличие значений в другой. SELECT name FROM employees WHERE department_id IN (SELECT id FROM departments); 🚩Объединение данных через `UNION` Если таблицы имеют схожие колонки, можно объединить их с UNION. SELECT id, name, email FROM users_old UNION SELECT id, name, email FROM users_new; 🚩Использование `CROSS JOIN` через `WHERE` Хотя CROSS JOIN делает декартово произведение, его можно фильтровать WHERE, имитируя INNER JOIN. SELECT e.name, d.name AS department FROM employees e, departments d WHERE e.department_id = d.id; Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиаOnly registered users can share their opinion.
Be the first to share your impression of this resource!