Друзья, привожу краткие ответы на вопросы с вчерашнего Mock-собеседования.
Ответы на вопросы:
1) Стандартный интерпретатор Python использует два алгоритма сборки мусора: подсчет ссылок и поколенческий сборщик мусора (Garbage collector, GC).
Алгоритм подсчета ссылок очень простой и эффективный, но у него есть один недостаток: он не умеет определять циклические ссылки. Именно из-за этого в Python существует дополнительный поколенческий GC, который следит за объектами с потенциальными циклическими ссылками.
Алгоритм подсчета ссылок является фундаментальным и не может быть отключен, тогда как поколенческий GC опционален и может быть отключен. В отличие от алгоритма подсчета ссылок, поколенческий GC не работает в режиме реального времени и запускается периодически. За поколенческий GC в Python отвечает модуль
2) Контекстный менеджер — это объект, определяющий контекст выполнения в операторе
Протокол контекстных менеджеров состоит из двух методов:
3) Тип
4) List (set, dict) comprehension — это упрощенный подход к созданию списка (множества, словаря), который задействует цикл
5) Приведенный код покажет
6) Приведенный код покажет
7) Приведенный код покажет
8) Несмотря на то, что
9) Приведенный код выведет
10) Декоратор — это функция, которая принимает другую функцию, расширяет ее поведение, не изменяя ее явно, и возвращает новую функцию. Подробности в нашем прекрасном уроке из курса для профессионалов.
11) Если в теле функции нет оператора
#собеседование #python #ответы
Ответы на вопросы:
1) Стандартный интерпретатор Python использует два алгоритма сборки мусора: подсчет ссылок и поколенческий сборщик мусора (Garbage collector, GC).
Алгоритм подсчета ссылок очень простой и эффективный, но у него есть один недостаток: он не умеет определять циклические ссылки. Именно из-за этого в Python существует дополнительный поколенческий GC, который следит за объектами с потенциальными циклическими ссылками.
Алгоритм подсчета ссылок является фундаментальным и не может быть отключен, тогда как поколенческий GC опционален и может быть отключен. В отличие от алгоритма подсчета ссылок, поколенческий GC не работает в режиме реального времени и запускается периодически. За поколенческий GC в Python отвечает модуль
gc
. Почитать про модуль gc
можно в официальной документации по ссылке.2) Контекстный менеджер — это объект, определяющий контекст выполнения в операторе
with
.Протокол контекстных менеджеров состоит из двух методов:
__enter__()
— вводит контекст и при необходимости возвращает некоторый объект. Значение, возвращаемое этим методом, привязывается к переменной в предложении as
оператора with.
__exit__()
— предоставляет выход из контекста и возвращает логический флаг (тип bool
), указывающий на то, следует ли подавлять возбужденное исключение.3) Тип
int
(целое число) является неизменяемым. Python кеширует небольшие целые числа в диапазоне от -5
до 256
и хранит их в единственном экземпляре. Поэтому для указанного диапазона чисел оператор is
всегда возвращает значение True
.4) List (set, dict) comprehension — это упрощенный подход к созданию списка (множества, словаря), который задействует цикл
for
, а также инструкции if-else
для определения того, что в итоге окажется в финальном списке.5) Приведенный код покажет
[[1], [1], [1]]
, поскольку в списке data
трижды хранится ссылка на один и тот же список.6) Приведенный код покажет
True, False, 10, []
. Обратите внимание, что в Python операторы or
и and
необязательно возвращают значение True/False
, как в других языках программирования. Подробнее об этом по ссылке.7) Приведенный код покажет
True, True, False
. Не забывайте, что итераторы являются однопроходными. Встроенная функция map()
возвращает итератор.8) Несмотря на то, что
range
— это ленивый объект, то есть он не хранит все свои значения в памяти, он не является итератором.9) Приведенный код выведет
20 20
. Чтобы понять, почему это происходит, нужно изучить механизм работы вложенных функций + замыкания.10) Декоратор — это функция, которая принимает другую функцию, расширяет ее поведение, не изменяя ее явно, и возвращает новую функцию. Подробности в нашем прекрасном уроке из курса для профессионалов.
11) Если в теле функции нет оператора
return
, то она неявно вернет значение None
. Исходя из определения декоратора (см. выше), получаем, что декоратор вернет None
и функция, которую мы декорируем, превратится в None
. При попытке вызвать ее после декорирования получим исключение TypeError: 'NoneType' object is not callable
.#собеседование #python #ответы