Python задачи и вопросы – Telegram
Python задачи и вопросы
1.22K subscribers
427 photos
1 file
154 links
Задачи и вопросы с собеседований по python разного уровня сложности

По рекламе: @cyberJohnny
Download Telegram
Что значит *args, **kwargs? И зачем нам их использовать?

Мы используем *args, когда неуверены, сколько аргументов будет передано функции, или если хотим передать сохраненный список или кортеж аргументов функции.

**kwargs используется, когда мы не знаем, сколько аргументов ключевых слов будет передано, а также он может быть использован для передачи значений словаря в качестве аргументов ключевых слов. Идентификаторы args и kwargs необязательны, вы можете изменить их на другие, типа *другой **пример, но лучше использовать имя по умолчанию.

Библиотека задач по Python
👍1
Что выведет код:
print(type({}) is set)

👾 — False
👍 —True
🥰 — None
⚡️ — Ничего

Библиотека задач по Python
👎1🔥1🎉1
Что делает функция sample?

Функция sample() позволяет выбрать случайным образом элементы из последовательности или коллекции.

Это удобно при необходимости получить случайную выборку из данных.

Функция принимает два основных аргумента:
population — последовательность, из которой надо выбрать элементы (list, tuple, string и т. д.)
k — количество элементов для выборки.

Дополнительные аргументы:

counts — список весов элементов (по умолчанию равновероятный выбор).
rng — генератор случайных чисел (по умолчанию берется из модуля random).

Библиотека задач по Python
👍1
Что означает RPO?

👾 — Максимально допустимая длительность простоя
👍 — Цель по времени восстановления сервиса
🥰 — Максимально допустимая потеря данных во времени
⚡️ — Среднее время до отказа

Библиотека задач по Python
Чем корректно отдавать большой поток данных?

👾 — Response с JSON
👍 — StreamingResponse
🥰 — FileResponse всегда загружает весь файл в память
⚡️ — HTMLResponse

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

👾 — Ошибок нет
👍 — Деление на ноль!
🥰 — ZeroDivisionError
⚡️ — Ничего

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

👾 — 9
👍 — [9, 1, 3]
🥰 — [3, 6]
⚡️ — Error
Библиотека задач по Python
👎1
Что даёт asyncio.TaskGroup по сравнению с gather?

👾 — Запускает задачи параллельно и скрывает исключения
👍 — При первом исключении отменяет остальные, дожидается их и выбрасывает ошибку после with
🥰 — Выполняет задачи строго последовательно
⚡️ — Требует вручную вызывать cancel() для каждой задачи при ошибке
Библиотека задач по Python
Как корректно задать мутируемый дефолт в dataclass?

👾 — items: list[str] = []
👍 — items: list[str] = field(default_factory=list)
🥰 — items как tuple, а в post_init конвертировать в list
⚡️ — Общая для всех экземпляров переменная класса items = []
Библиотека задач по Python
👍1
Зачем использовать contextvars.ContextVar вместо threading.local в async-коде?

👾 — Потому что быстрее при тех же семантиках
👍 — Даёт изоляцию на задачу: значение «течёт» через await внутри Task, но не между задачами/потоками; threading.local изолирует только по потоку и протекает между корутинами
🥰 — Автоматически сериализует состояние между процессами
⚡️ — Разрешает безопасно менять глобальные переменные
Библиотека задач по Python
Что делает __slots__ в классе?

👾 — Делает экземпляры неизменяемыми и хешируемыми
👍 — Убирает dict у экземпляров и запрещает произвольные атрибуты, оставляя только перечисленные слоты (меньше памяти)
🥰 — Превращает класс в dataclass
⚡️ — Включает GIL-оптимизации для всех операций
Библиотека задач по Python
Как в Python 3.11+ выполнить блокирующую функцию из async-кода без доступа к loop?

👾 — await func()
👍 — await asyncio.to_thread(func, *args)
🥰 — time.sleep() внутри корутины
⚡️ — await asyncio.sleep(0) перед вызовом
Библиотека задач по Python
Как перезагрузить импортированный модуль?

Чтобы перезагрузить импортированный модуль в Python, вы можете использовать функцию reload() из модуля importlib.

Замените module_name на фактическое имя модуля, который вы хотите перезагрузить.
Это может быть полезно при разработке и тестировании модулей, но не рекомендуется использовать в производственном коде без серьезных причин.

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

👾 — ['Hello', 'World']
👍 — ['HELLO', 'WORLD']
🥰 — ['None', 'None']

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

👾 — 20
👍 — 45
🥰 — 54
⚡️ — 4.5

Библиотека задач по Python
Чем отличается copy.copy от copy.deepcopy?

👾 — Обе делают глубокую копию
👍 — copy копирует только контейнер, вложенные объекты — по ссылке; deepcopy рекурсивно копирует всё
🥰 — Обе лишь увеличивают счётчик ссылок
⚡️ — deepcopy быстрее, поэтому всегда лучше

Библиотека задач по Python
👍2
Что делает yield from subgen?

👾 — Просто вызывает подгенератор и возвращает список
👍 — Делегирует итерацию/send/throw/close подгенератору и получает его return как результат (PEP 380)
🥰 — Запускает подгенератор параллельно в другом потоке
⚡️ — Гарантирует выполнение в отдельном процессе

Библиотека задач по Python
Что даёт @dataclass(frozen=True)?

👾 — Глубоко делает неизменяемыми и все вложенные объекты
👍 — Запрещает присваивания атрибутов (иммутабельность на уровне класса) и при eq=True по умолчанию делает экземпляр хешируемым
🥰 — Автоматически копирует все мутируемые аргументы
конструктора
⚡️ — Включает slots и уменьшает память

Библиотека задач по Python
Что делает asyncio.gather(..., return_exceptions=True)?

👾 — Отменяет все задачи при первом исключении
👍 — Возвращает исключения как элементы результата, не прерывая остальные задачи
🥰 — Полностью скрывает исключения и возвращает None
⚡️ — Автоматически перезапускает упавшие задачи

Библиотека задач по Python
Зачем нужен from __future__ import annotations?

👾 — Включает проверку типов в рантайме и кидает ошибки при несоответствии
👍 — Откладывает вычисление аннотаций (хранятся как строки), упрощая forward refs и циклические импорты
🥰 — Автоматически импортирует typing и делает аннотации обязательными
⚡️ — Превращает аннотации в комментарии и удаляет их из annotations

Библиотека задач по Python
Почему нельзя вызывать asyncio.run() внутри уже работающего event loop (например, в Jupyter/ASGI)?

👾 — Потому что asyncio.run требует Python 3.12+
👍 — У него свой цикл событий; внутри активного цикла бросит RuntimeError. Нужно await корутину или создавать задачу (asyncio.create_task)
🥰 — Он автоматически вкладывает циклы друг в друга
⚡️ — Это всего лишь алиас loop.run_until_complete

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