
- •Теоретические вопросы
- •1. Какая реализация интерпретатора python является стандартной? Назовите популярные реализации других интерпретаторов и их особенности.
- •2. Какие парадигмы программирования поддерживает python. Кратко объясните их?
- •3/4. Что такое мутабельные и иммутабельные типы данных? Чем они отличаются? Приведите примеры мутабельных/иммутабельных типов.
- •5. Приведение стандартных типов данных к логическому. На основе чего оно работает и где принято применять?
- •6. Необходимо реализовать функцию, которая принимает переменное число аргументов. Какой инструмент python вы для этого используете? Объяснить его принцип работы.
- •7. Как использовать дефолтные аргументы функции и как их изменять? Возможные проблемы, связанные с ними.
- •8. Что такое оператор упаковки и распаковки, их сходства и отличия? Приведите примеры использования.
- •9. Как в python работает области видимости (локальный и глобальный контекст, видимость функций, тело операторов)?
- •10. Что такое lambda выражение, как оно работает и из чего строится? Напишите простейшее lambda выражение и приведите примеры, где его принято применять.
- •11. Перечислите набор встроенных в python функций, взятых из функционального программирования. Как они работают (принимаемые аргументы и результат работы), где их можно применять?
- •12. Что такое list comprehension? Реализуйте его и объясните, какие преимущества у него есть.
- •13. Что такое декоратор? На основе каких принципов python он устроен? Реализуйте простейший декоратор.
- •15. В чем отличие bound method от function? Синтаксический сахар при вызове методов у объекта класса.
- •16. Геттеры и сеттеры в python. Реализуйте класс, в котором будет одно поле и для работы с ним геттер и сеттер.
- •17. Работа со __slots__ в python. Зачем нужен данный инструмент, какие задачи выполняет, какие ограничения накладывает на объект класса и какие преимущества дает.
- •18. Реализация сокрытия полей и методов в python. Общепринятые соглашение о наименовании. Преимущества и недостатки такого подхода.
- •19. Функция super. Объяснить принцип ее работы.
- •20. Что такое “магические методы” в python? Их отличительная особенность в именовании. Какие задачи выполняют? Назвать пять штук с объяснением их работы.
- •21. Как работают getattr, setattr, hasattr и т.Д.? Как переопределить их стандартную реализацию для конкретного класса?
- •22. Множественное наследование в python. Выбор вызываемого метода. Привести пример.
- •23. Как работают функции isinstance и issubclass? При решении каких задач они могут пригодиться.
- •24. Что такое иерархия исключений в python? Объяснить принцип ее построения. Как правильно перехватить любое исключение?
- •25. Что такое иерархия исключений в python? Объяснить принцип ее построения. Реализация собственных исключений в python.
- •26. У вас есть блок try/except, который перехватывает все исключения. Как правильно вывести трейсбек, но чтобы при этом программа продолжила функционировать?
- •27. Обработка множественных исключений в python и ее корректная реализация. Как функционирует блок else в таком случае?
- •28. Что такое менеджер контекста в python? Какие задачи он выполняет при работе с различными файлами? Можно ли дублировать его работу через try/except/finally?
- •29. Что такое итератор в python? Какие два метода позволяют реализовать протокол итерации для объекта класса и что они должны возвращать?
- •30. Что такое генератор в python? Какое главное преимущество? Реализуйте простейший генератор.
- •1. Дан список из n элементов строчного типа. Удалить все элементы, состоящие из пустых строк.
12. Что такое list comprehension? Реализуйте его и объясните, какие преимущества у него есть.
List comprehension — это упрощенный подход к созданию списка, который задействует цикл for, а также инструкции if-else для определения того, что в итоге окажется в финальном списке.
У list comprehension есть три основных преимущества.
Простота. List comprehension позволяют избавиться от циклов for, а также делают код более понятным.
Скорость. List comprehension быстрее for-циклов, которые он и заменяет. Это один из первых пунктов при рефакторинге Python-кода.
Принципы функционального программирования.
Пример list comprehension:
nums = [n for n in range(1,6)] |
13. Что такое декоратор? На основе каких принципов python он устроен? Реализуйте простейший декоратор.
Декоратор — это функция, которая позволяет обернуть другую функцию для расширения её функциональности без непосредственного изменения её кода.
Декораторы основаны на принципах функционального программирования.
Простейший декоратор:
def decor_func(func): def wrapper(): print(“Функция-обертка!”) print(“Выполнение функции…”) func() print(“Конец функции”) return wrapper
@decor_func def func(): print(f’2 * 2 = {2 * 2}’) |
14. Некоторые декораторы служат для средств дебага (трассировка данных, время выполнения функций и т.д.). Как сделать так, чтобы, когда мы не нуждаемся в дебаге, влияние на скорость выполнение программы было минимально. Приведите пример такого декоратора.
Для минимализации влияния декоратора на время работы программы, когда мы не нуждаемся в дебаге можно задать константу с именем DEBUG и задавать ей значения True (дебаг активен) или False (дебаг не активен). В таком случае в декораторе дебага надо задать обработку данной константы и в зависимости от ее значения начинать дебаг или нет.
Пример такого декоратора:
DEBUG = True # дебаг активен
def debug(func): if not DEBUG: return func
def wrapper(*args, **kwargs): # Функции дебага return wrapper |
15. В чем отличие bound method от function? Синтаксический сахар при вызове методов у объекта класса.
Одним из главных отличий bound method (связанного метода) от function (несвязанный метод) является автоматическая передача экземпляра (self) в первом аргументе. В несвязанном методе необходимо передавать экземпляр в функцию при ее вызове, а в связанном это происходит автоматически, что позволяет обращаться к переменным класса. Наличие такой автоматической передачи экземпляра и можно назвать синтаксическим сахаром.
16. Геттеры и сеттеры в python. Реализуйте класс, в котором будет одно поле и для работы с ним геттер и сеттер.
Геттер - это метод, который используется в ООП для доступа к частным атрибутам класса.
Сеттер - это метод, который используется для установки значения свойств.
Пример класса с геттером и сеттером:
class A: def __init__(self, value = 0): self._a = value
# Геттер @property def a(self): return self._a
# Сеттер @a.setter def a(self, value): self._a = value
cls = A() print(cls.a) cls.a = 10 print(cls.a) |