
- •Теоретические вопросы
- •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 элементов строчного типа. Удалить все элементы, состоящие из пустых строк.
26. У вас есть блок try/except, который перехватывает все исключения. Как правильно вывести трейсбек, но чтобы при этом программа продолжила функционировать?
Пример программы:
import traceback try: any_func() except Exception: traceback.print_exc() print("Все хорошо, программа продолжает функционировать") |
27. Обработка множественных исключений в python и ее корректная реализация. Как функционирует блок else в таком случае?
Питон позволяет нам объявлять множественные исключения с помощью оператора except.
try: #block of code
except(<Exception 1>,<Exception 2>,<Exception 3>,...<Exception n>) #block of code
else: #block of code |
Функция else:
Блок else будет выполнен, если в блоке try нет исключений.
28. Что такое менеджер контекста в python? Какие задачи он выполняет при работе с различными файлами? Можно ли дублировать его работу через try/except/finally?
Менеджер контекста - конструкция, которая позволяет захватить ресурс, выполнить необходимые операции, а затем освободить его. Или же настроить что-нибудь и/или разорвать.
Пример :
with open('hello.txt', 'a') as file: file.write('\nHello world!')
closed = file.closed print("Is the file closed?", closed) |
Is the file closed? True |
С with (контекстным менеджером) можно открыть/закрыть подобный файл.
Еще пример (менеджер контекста открывает файл и создаёт объект, с которым дальше будет производиться работа. Завершая операцию и любые исключения, выброшенные в процессе выполнения операции, менеджер контекста закроет файл. Поскольку файлы являются совместно используемыми ресурсами, критически важно, чтобы мы освободили их после того, как выполним операции, чтобы другие процессы получили к ним доступ.):
try: file = open('hello.txt') except Exception: raise finally: file.close() |
try/except/finally:
from threading import Lock
with Lock(): pass
lock = Lock() lock.acquire() try: # выполнение операций except Exception: # обработка исключений finally: lock.release() |
Пример - работа с данными в многопоточных проектах.
Проблема таких проектов - несколько потоков получают доступ к одному и тому же массиву данных: одна операция добавляет данные, в то время как другая читает старые данные в другой файловой операции. Например, один поток пытается добавить данные в словарь, а другой в то же время пытается выполнять итерирование словаря. Всё слишком быстро выходит из-под контроля.
Решение - блокировка потока, чтобы уменьшить беспорядок в данных. Цель - получить полный контроль над ресурсами на временной основе. Поэтому лучше всего применить оператор with.
29. Что такое итератор в python? Какие два метода позволяют реализовать протокол итерации для объекта класса и что они должны возвращать?
Итератор в программировании - объект, позволяющий проходить через всю последовательность, вне зависимости от ее реализации.
Итератор в питоне - объект, выполняющий протокол итератора, который состоит из двух методов: iter() и next(). Первый возвращает объект итератор, а второй возвращает следующий элемент из последовательности.
Преимущества итераторов:
-Чистый код
-Могут работать с бесконечными последовательностями
-Экономия ресурсов