O'zbek adabiyoti
Программирование на Python
от besteady · 10 вопросов ·
0 сохранений · 0 лайков
Играть в QuizPilot
#1
1) Какое из следующих утверждений наиболее точно описывает поведение GIL (Global Interpreter Lock) в CPython?
- GIL отсутствует в стандартной реализации CPython и присутствует только в альтернативных интерпретаторах
- GIL предотвращает переключение потоков до завершения выполнения всей программы
- GIL позволяет одновременно выполняться нескольким потокам Python на нескольких ядрах при активном выполнении байткода
- GIL блокирует одновременное выполнение байткода Python в нескольких потоках, но не мешает выполнению сторонних C-расширений, освобождающих GIL
Показать ответ
GIL блокирует одновременное выполнение байткода Python в нескольких потоках, но не мешает выполнению сторонних C-расширений, освобождающих GIL
#2
2) Какой из способов наиболее корректен для замены рекурсивной функции с глубиной до нескольких тысяч на итеративную, чтобы избежать переполнения стека?
- Реализовать эквивалентный алгоритм с использованием явного стека (списка) и цикла while
- Переписать функцию с использованием генераторов и yield, сохраняя рекурсивную логику
- Использовать модуль threading, запускать каждую рекурсивную ветвь в отдельном потоке
- Просто увеличить лимит рекурсии через sys.setrecursionlimit без изменения алгоритма
Показать ответ
Реализовать эквивалентный алгоритм с использованием явного стека (списка) и цикла while
#3
3) Что вернёт выражение: tuple(dict.fromkeys([1,2,1,3]).keys()) в Python 3.8?
- Ошибка выполнения, так как dict.fromkeys возвращает итератор, несовместимый с tuple
- (3, 2, 1)
- (1, 2, 3)
- (1, 2, 1, 3)
Показать ответ
(1, 2, 3)
#4
4) Какое утверждение о пониманиях списков (list comprehensions) и генераторах (generator expressions) верно?
- Генераторы возвращают список сразу, а понимания списков — лениво вычисляют элементы по запросу
- Понимания списков и генераторы всегда используют одинаковое количество памяти
- Понимания списков быстрее и потребляют больше памяти по сравнению с генераторными выражениями для больших последовательностей
- Генераторы не поддерживают выражения if/else внутри своего тела
Показать ответ
Понимания списков быстрее и потребляют больше памяти по сравнению с генераторными выражениями для больших последовательностей
#5
5) Какой метод наиболее подходящ для безопасного управления ресурсом (например, файла) с гарантированным освобождением, даже при возникновении исключений?
- Запускать сборщик мусора вручную после использования ресурса
- Использовать конструкцию with и менеджер контекста (context manager)
- Открыть ресурс и явно вызывать close() в конце скрипта
- Оборачивать весь код в try/except без finally
Показать ответ
Использовать конструкцию with и менеджер контекста (context manager)
#6
6) В чём основное отличие между shallow copy и deep copy объектов в Python?
- Shallow copy копирует только неизменяемые поля, deep copy копирует изменяемые
- Shallow copy создаёт новую оболочку, ссылающуюся на те же вложенные объекты; deep copy рекурсивно копирует вложенные объекты
- Между ними нет отличий для списков и словарей
- Shallow copy дублирует весь граф объектов рекурсивно, deep copy копирует только верхний уровень
Показать ответ
Shallow copy создаёт новую оболочку, ссылающуюся на те же вложенные объекты; deep copy рекурсивно копирует вложенные объекты
#7
7) Какое поведение у функции async def в сочетании с ключевым словом await в Python?
- async def превращает функцию в поток ОС, который запускается параллельно без need await
- await блокирует весь интерпретатор до завершения ожидаемой операции
- await можно использовать только вне async функций
- async def определяет корутину; await приостанавливает её выполнение и даёт управление loop для других задач
Показать ответ
async def определяет корутину; await приостанавливает её выполнение и даёт управление loop для других задач
#8
8) Какой из способов наиболее эффективно объединяет несколько словарей в Python 3.9+, создавая новый словарь?
- Использовать оператор | для объединения: new = d1 | d2
- Использовать метод dict.merge(d1, d2)
- Использовать dict.update в цикле копирования ключей вручную
- Связать словари в кортеж: new = (d1, d2)
Показать ответ
Использовать оператор | для объединения: new = d1 | d2
#9
9) Что из перечисленного является корректным способом обеспечения типовой аннотации функции, принимающей любой итерируемый тип и возвращающей список элементов того же типа (используя typing)?
- def f(x: list) -> list: ... (без использования обобщённых типов)
- def f(x: Any) -> Any: ... (без TypeVar)
- def f(x: Iterable) -> Iterable: ... (без указания параметров типа)
- def f(x: Iterable[T]) -> List[T]: ... (с соответствующим from typing import Iterable, List, TypeVar)
Показать ответ
def f(x: Iterable[T]) -> List[T]: ... (с соответствующим from typing import Iterable, List, TypeVar)
#10
10) При профилировании CPU-bound Python-программы, какой подход обычно даёт наилучшее ускорение на многоядерной системе?
- Увеличить объем логгирования для отслеживания узких мест
- Запускать программу в нескольких процессах без разделения задач
- Перевести вычисления в чистый Python и использовать threading для параллелизма
- Использовать multiprocessing или перенести вычисления в C/Cython/Numba, чтобы обойти GIL
Показать ответ
Использовать multiprocessing или перенести вычисления в C/Cython/Numba, чтобы обойти GIL
Играть в QuizPilot