QuizPilotПредметыO'zbek adabiyoti
O'zbek adabiyoti

Программирование на Python

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