- •Теоретические вопросы
- •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 элементов строчного типа. Удалить все элементы, состоящие из пустых строк.
17. Работа со __slots__ в python. Зачем нужен данный инструмент, какие задачи выполняет, какие ограничения накладывает на объект класса и какие преимущества дает.
Атрибут __slots__ позволяет явно объявить элементы данных и запрещать создание словаря. Он ограничивает допустимый набор имен атрибутов объекта только перечисленными именами. При использовании атрибута __slots__ атрибуты хранятся в заранее определенных местах в массиве. Таким образом каждый атрибут слота является объектом дескриптора, который знает, как установить/получить каждый атрибут с помощью индекса массива. Преимуществом атрибута __slots__ является более быстрый доступ к атрибутам.
18. Реализация сокрытия полей и методов в python. Общепринятые соглашение о наименовании. Преимущества и недостатки такого подхода.
Инкапсуляция — это заключение данных и функционала в оболочку. В объектно-ориентированном программировании в роли оболочки выступают классы: они не только собирают переменные и методы в одном месте, но и защищают их от вмешательства извне (сокрытие).
Python 3 предоставляет 3 уровня доступа к данным:
публичный (public, нет особого синтаксиса, publicBanana);
защищенный (protected, одно нижнее подчеркивание в начале названия, _protectedBanana);
приватный (private, два нижних подчеркивания в начала названия, __privateBanana).
Преимущества сокрытия данных:
Это повышает защиту от хакеров, которые не могут получить доступ к важным данным.
Это помогает программисту от неправильного связывания с поврежденными данными.
Обеспечивает высокую безопасность, которая предотвращает повреждение и нарушение данных, скрывая их от общественности.
Недостатки сокрытия данных:
Иногда программистам нужно написать лишнее право залога кода.
Сокрытие данных предотвращает связь, которая действует как связь между видимыми и невидимыми данными, делая объект быстрее.
Заставляет программистов писать дополнительный код, чтобы скрыть важные данные от обычных пользователей.
Основной принцип соглашения об именах в Python - имена, которые видны пользователю как открытые части API, должны соответствовать соглашениям, которые отражают использование, а не реализацию.
Соглашение об именах содержит следующие пункты:
Никогда не используются символы l (строчная L), O (заглавная o) или I (заглавная i) для переменных из одного символа. В некоторых шрифтах эти символы неотличимы от цифр один и ноль.
Символы должны быть совместимы с ASCII
Модули должны иметь короткие строчные имена, могут быть использованы подчеркивания, если это улучшает читабельность.
Имена классов пишутся по технике CapWords (первые буквы слова - заглавные)
Имена типов переменных должны использовать CapWords
Имена исключений задаются по принципам имен классов. Если исключение является ошибкой, то оно должно содержать суффикс Error
Имена функций должны быть строчными, слова разделяются подчеркиванием. Допускается mixedCase (первое слово - строчное, остальные начинаются с большой буквы), когда этот стиль уже преобладает.
Имена методов и переменных экземпляра класса используют правила написания функций.
Константы пишутся заглавными буквами с подчеркиваниями между слов.