Q: Что такое контекстный менеджер? Для чего он нужен? Приведите пример.
A: Контекстные менеджеры позволяют задать поведение при работе с конструкцией with: при входе и выходе из блока. Это упрощает работу с ресурсами в части их захвата и освобождения. Частый кейс - закрытие файловых дескрипторов.
A: Декоратор - это обёртка над функцией (или другим объектом), которая изменяет ее поведение. Это удобно, т.к. не нужно менять исходный код, который не обязательно будет вашим. Использование: оценка времени работы функции, кеширование, запуск только в определенное время, задание параметров подключения к базе данных и т.д.
A: Анонимная функция, то есть функция, которая имеет функционал (в одну строку), но не имеет имени. Как правило, используется как параметр функции (например filter(), sorted()) или как возвращаемое значение функции.
A: Итератор — механизм поэлементного обхода данных, а генератор позволяет отложено создавать результат при итерации. Генератор может создавать результат на основе алгоритма или брать элементы из источника данных и изменять их. Получаем разделение ответственности: клиенты имеют возможность работать с разными коллекциями унифицированным образом, а коллекции становятся проще за счет того, что делегируют перебор элементов другой сущности. Любой генератор в Python - итератор, но не наоборот. Примеры генераторов: range() (генерирует арифметическую прогрессию), enumerate() (генерирует двухэлементные кортежи: индекс + элемент итерируемого объекта)
Q: Дан кортеж: tpl = (1, 2, 3, [1,2,3], 5). Как все знают, кортеж - это неизменяемый тип данных. Изменится ли его содержимое после выполнения команды tpl[3].append(4)?
A: Да, изменится, так как кортеж содержит только ссылки на объекты и поэтому не может защитить объект внутри себя от изменения.
Q: Чем отличаются изменяемые и неизменяемые данные?
A: Изменяемый тип — сложный тип данных в объектно-ориентированном программировании, значения которого (как правило — объекты) после своего создания допускают изменение своих свойств. К неизменяемым относятся целые числа (int), числа с плавающей запятой (float), булевы значения (bool), строки (str), кортежи (tuple). К изменяемым — списки (list), множества (set), байтовые массивы (byte arrays) и словари (dict).