- •Теоретические вопросы
- •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 элементов строчного типа. Удалить все элементы, состоящие из пустых строк.
22. Множественное наследование в python. Выбор вызываемого метода. Привести пример.
Один класс, расширяющий более одного класса, называется множественным наследованием в Python. Так как наследование подразумевает использование методов наследуемых классов, то вызывать метод можно от наследника.
Пример множественного наследования:
# Первый родительский класс class Person: def __init__(self, personName, personAge): self.name = personName self.age = personAge
def show_name(self): print(self.name)
def show_age(self): print(self.age)
# Второй родительский класс class Student: def __init__(self, studentID): self.id = studentID
def get_id(self): return self.id
# Наследующий класс class Resident(Person, Student): def __init__(self, name, age, id): Person.__init__(self, name, age) Student.__init__(self, id)
# Создание объекта подкласса и вызов методов resident1 = Resident('Bob', 20, '123') resident1.show_name() print(resident1.get_id()) |
Классы Person и Student являются здесь суперклассом, а Resident – подклассом. Класс Resident расширяет как Person, так и Student, чтобы наследовать свойства обоих классов. Этот код дает следующий результат:
Bob 123 |
23. Как работают функции isinstance и issubclass? При решении каких задач они могут пригодиться.
Isinstance - эта функция вернет True, если проверяемый объект окажется экземпляром указанного класса или его подкласса.
Issubclass - эта функция возвращает True, если указанный класс является подклассом указанного класса. Класс считается подклассом самого себя.
Их можно использовать для проверки типа и выполнения различных операций в зависимости от типа объекта.
24. Что такое иерархия исключений в python? Объяснить принцип ее построения. Как правильно перехватить любое исключение?
Иерархия исключений - дерево наследуемых классов, составляющие порядок их обработки. Первыми на очереди обработки находятся выходы из программы (SystemExit, KeyboardInterrupt, GeneratorExit). Следом после них обрабатываются алгоритмические ошибки, например арифметические (деление на ноль), ошибки импорта библиотек, ошибки памяти, доступа к файлам, синтаксические ошибки. Самыми последними в очереди обработки находятся предупреждения о возможных ошибках.
Для перехватывания любой ошибки используется конструкция:
try: # any code except Exception as e: # Перехват ошибок всех типов # действия при ошибке, например, ее вывод |
25. Что такое иерархия исключений в python? Объяснить принцип ее построения. Реализация собственных исключений в python.
То же, что и в 24
Пользовательские исключения позволяют увеличить гибкость процесса обработки ошибок в рамках той предметной области, для которой написана программа. Для реализации собственного типа исключения необходимо создать класс, являющийся наследником от одного из классом исключений.