Python задачи и вопросы
1.27K subscribers
412 photos
1 file
152 links
Задачи и вопросы с собеседований по python разного уровня сложности

По рекламе: @cyberJohnny
Download Telegram
✍🏻 Что такое фабрика декораторов?

Фабрика декораторов — это особая разновидность функции высшего порядка, которая возвращает декоратор вместо прямого результата. Главное отличие фабрики декораторов от обычного декоратора в том, что она принимает аргументы, которые могут конфигурировать логику декоратора.

Например, фабрика может принимать имя лог-файла, в который будет производиться запись при вызове декорируемой функции. Или уровень логирования вместо простой записи всех вызовов.
Такой подход позволяет создавать переиспользуемые и гибко настраиваемые декораторы для решения разных задач.

Главные преимущества фабрик декораторов — это возможность абстрагироваться от конкретики реализации, избежать дублирования кода и создавать интуитивный API для декораторов с настройками.

Библиотека задач по Python
👍1
В каких ситуациях возникает исключение NotImplementedError?

Исключение NotImplementedError возникает, когда метод или функция должны быть реализованы в подклассе, но не были реализованы. Это может произойти, когда родительский класс определяет метод, но не реализует его сам, а оставляет это для подклассов. В этом случае, если подкласс не реализует метод, он будет вызывать исключение NotImplementedError. Это может быть полезно для отладки, чтобы убедиться, что все необходимые методы реализованы в подклассах. Это также может возникнуть в других ситуациях, например, если вы пытаетесь использовать неопределенную функцию или метод.

Библиотека задач по Python
Каким будет результат следующего выражения: -31 % 10?

Результатом выражения -31 % 10 будет 9. Это происходит потому, что для отрицательных чисел оператор % возвращает остаток от деления первого числа на второе немного другим образом. -31 % 10 = -3 — 1/10 и в ответ мы получим 10 — 1 = 9.

Библиотека задач по Python
Что выведет код сверху?

👾 — 1 1 1 1
👍 — None
🥰 — 1.111
⚡️ — 1111.0

Библиотека задач по Python
👍1
Какое утверждение верно для работы с замыканиями и областями видимости в Python при использовании nonlocal и global?

👾 — nonlocal и global изменяют значение переменной только в момент объявления функции, а не при выполнении
👍 — nonlocal ищет переменную в ближайшей внешней области видимости, не включая глобальную, и изменяет её по ссылке
🥰 — global и nonlocal идентичны в поведении, но nonlocal можно использовать только внутри вложенных функций
⚡️ — Если переменная помечена как nonlocal, Python создаёт новую переменную в замыкании, не затрагивая внешнюю

Библиотека задач по Python
Что выведет код?

👾 — 4
👍 — 9
🥰 — 10
⚡️ — 15

Библиотека задач по Python
👍1
Что выведет код сверху?

👾 — 0 1
👍 — 0
🥰 — 1

Библиотека задач по Python
👍2
Что выведет код сверху?

👾 — 3
👍 — 3.5
🥰 — Error

Библиотека задач по Python
Какой будет вывод следующего фрагмента кода?

s = {1, 2, 3, 3, 2, 4, 5, 5}
print(s)

👾 — {1, 2, 3, 3, 2, 4, 5, 5}
👍 — {1, 2, 3, 4, 5}
🥰 — None
⚡️ — {1, 5}

Библиотека задач по Python
👍2
✍🏻 Что такое фабрика декораторов?

Фабрика декораторов — это особая разновидность функции высшего порядка, которая возвращает декоратор вместо прямого результата. Главное отличие фабрики декораторов от обычного декоратора в том, что она принимает аргументы, которые могут конфигурировать логику декоратора.

Например, фабрика может принимать имя лог-файла, в который будет производиться запись при вызове декорируемой функции. Или уровень логирования вместо простой записи всех вызовов.
Такой подход позволяет создавать переиспользуемые и гибко настраиваемые декораторы для решения разных задач.

Главные преимущества фабрик декораторов — это возможность абстрагироваться от конкретики реализации, избежать дублирования кода и создавать интуитивный API для декораторов с настройками.

Библиотека задач по Python
👍1
Что выведет код сверху?

👾 — True
👍 — False
🥰 — Error
⚡️ — Другое

Библиотека задач по Python
Почему Flask называют микрофреймворком?

Flask называют «микро», поскольку его основной набор функций относительно ограничен: маршрутизация, обработка запросов и модули разработки — вот и всё, что есть в нём. Многие возможности, такие как ORM, кэширование и аутентификация, были доступны в качестве дополнительных расширений, но конкурирующие фреймворки (например, Django) включали их по умолчанию. Архитектура «небольшое ядро + расширения» делает его «микро-» фреймворком, с которым гораздо проще начать работать и масштабировать.

Библиотека задач по Python
Что выведет код?

👾 — 0
👍 — -1
🥰 — -2
⚡️ — -4
Библиотека задач по Python
Вы работаете с высоконагруженным Python-сервисом. При профилировании заметили, что использование list приводит к избыточным копированиям данных и росту потребления памяти. Какой подход будет наиболее правильным для оптимизации?

👾 — Использовать tuple вместо list, так как они быстрее и занимают меньше памяти
👍 — Применить генераторы и итераторы (yield, generator expressions), чтобы обрабатывать данные лениво
🥰 — Хранить данные в глобальной переменной, чтобы избежать повторных аллокаций
⚡️ — Переписать часть логики на Cython, чтобы ускорить операции с массивами
Библиотека задач по Python
В Python у вас есть обработчик, который должен обрабатывать миллионы строк из большого файла без перегрузки памяти. Какой подход наиболее правильный?

👾 — Читать весь файл в память через readlines() и обрабатывать список
👍 — Читать файл построчно с помощью итератора (for line in file:)
🥰 — Использовать multiprocessing для параллельного чтения всего файла целиком
⚡️ — Преобразовать файл в JSON и загрузить его через json.load()

Библиотека задач по Python
Почему в многопоточном Python-приложении прироста скорости для CPU-bound задач почти не видно?

👾 — Потому что интерпретатор Python не умеет распараллеливать задачи
👍 — Потому что работает Global Interpreter Lock (GIL), который позволяет исполнять байткод только одному потоку
🥰 — Потому что потокам всегда не хватает памяти для стека
⚡️ — Потому что asyncio нужно использовать вместо потоков

Библиотека задач по Python
У вас есть Python-сервис, обрабатывающий большие объёмы данных. При профилировании видно, что программа тратит много времени на создание временных коллекций при работе с map, filter и list comprehensions. Какой подход поможет уменьшить расход памяти и повысить эффективность?

👾 — Переписать код на while-циклы с индексами
👍 — Использовать генераторы и выражения-генераторы вместо создания списков
🥰 —Заменить map и filter на вложенные for-циклы
⚡️ — Принудительно вызывать gc.collect() после каждой итерации
Библиотека задач по Python
У вас есть сервис на Python, который должен параллельно обрабатывать CPU-bound задачи (например, шифрование файлов). Какой из подходов обеспечит реальный прирост производительности?

👾 — Использовать threading.Thread для распараллеливания задач
👍 — Применить asyncio и await для конкурентного выполнения
🥰 — Использовать multiprocessing или ProcessPoolExecutor
⚡️ — Запускать задачи в concurrent.futures.ThreadPoolExecutor
Библиотека задач по Python
В продакшн-сервисе на Python при росте нагрузки CPU-bound задачи (например, обработка изображений) выполняются значительно медленнее, хотя вы используете ThreadPoolExecutor. Почему так происходит и что правильнее сделать?

👾 — В Python потоки работают медленно, лучше перейти на asyncio
👍 — Из-за GIL потоки не дают прироста для CPU-bound задач, лучше использовать ProcessPoolExecutor или multiprocessing
🥰 — Нужно увеличить количество потоков в пуле, чтобы загрузить CPU на 100%
⚡️ — Проблема в сборщике мусора, надо чаще вызывать gc.collect()
Библиотека задач по Python
Вы пишете сервис на Python, который обрабатывает большой поток сетевых запросов. В профилировании видно, что приложение часто простаивает в ожидании I/O. Какой подход будет наиболее правильным для масштабирования?

👾 — Использовать threading.Thread для каждого соединения
👍 — Переписать код на asyncio или uvloop, чтобы обрабатывать соединения асинхронно
🥰 — Запускать gc.collect() после каждого запроса
⚡️ — Перейти на multiprocessing, создавая процесс на каждый запрос

Библиотека задач по Python