![](/user_photo/_userpic.png)
- •Теоретические вопросы
- •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 элементов строчного типа. Удалить все элементы, состоящие из пустых строк.
7. Как использовать дефолтные аргументы функции и как их изменять? Возможные проблемы, связанные с ними.
Аргументы функции по умолчанию (дефолтные) - аргументы, значения которых заданы при объявлении функции. Их необязательно передавать при вызове функции, но при этом, если вызвать функцию с заданным значением такого аргумента, то его значение изменится на передаваемое. Одной из особенностей (проблем) таких аргументов является то, что после таких аргументов не могут идти аргументы без значения по умолчанию. То есть такие аргументы при объявлении функции должны идти строго после объявления аргументов без значения по умолчанию.
8. Что такое оператор упаковки и распаковки, их сходства и отличия? Приведите примеры использования.
Оператор упаковки создает кортеж из нескольких значений. Обозначается * при обозначении аргументов функции. Может использоваться для передачи некоторого количества переменных в функцию.
Оператор распаковки наоборот, разделяет кортеж на переменные. обозначается * при передаче списка в функцию. Может использоваться для передачи переменных в функцию в виде списка.
9. Как в python работает области видимости (локальный и глобальный контекст, видимость функций, тело операторов)?
Если переменная является локальной, то есть объявляется внутри какой-то структуры, например цикла или функции, то мы не можем ее использовать нигде, кроме определенной части кода. Глобальные переменные наоборот, объявляются за пределами каких-либо структур и могут быть вызваны из любой части программы.
Видимость функций определяется порядком их написания. Например, если мы попытаемся вызвать функцию до ее объявления и написания, то интерпретатор вернет ошибку о несуществующей функции.
10. Что такое lambda выражение, как оно работает и из чего строится? Напишите простейшее lambda выражение и приведите примеры, где его принято применять.
lambda выражение необходимо для написания одноразовых анонимных функций, ограниченных одним выражением. Такое выражение строится по принципу:
lambda *имена переменных*: *действие над переменными* |
Примером простейшего lambda выражения можно представить функцию сложения чисел:
f = lambda a, b: a + b a = 2 b = 3 print(f(a, b)) |
У lambda выражений есть ограничения:
не могут содержать return, pass, assert, raise;
не имеют имени функции;
не могут иметь в теле более одной строки с выражением;
не поддерживают аннотации типов.
В основном lambda выражения используют со встроенными функциями zip() (объединяет в кортежи переданные функции элементы последовательностей), map() (применяет функцию к каждому элементу составного типа данных, например, списка), filter() (фильтрует переданный в функцию список по условию, заданному другой функцией)
11. Перечислите набор встроенных в python функций, взятых из функционального программирования. Как они работают (принимаемые аргументы и результат работы), где их можно применять?
Как правило, когда говорят о элементах функционального программировании в Python, то подразумеваются следующие функции: lambda, map, filter, reduce, zip.
lambda выражение описано в 10 вопросе.
Функция map() принимает два аргумента: функцию и последовательность данных, например список. Она применяет переданную функцию к каждому элементу списка, после чего возвращает его.
Пример работы функции:
a = [1, 2, 3, 0.1, 1.5] b = list(map(lambda x: x * 1.6, a)) print(b) |
[1.6, 3.2, 4.8, 0.16, 2.4] |
Функция filter() имеет аналогичные с map() аргументы. Она фильтрует данные в соответствии с условиями функции, возвращая отфильтрованный список. Функция должна строго возвращать True или False.
Пример работы функции:
a = ["a", "b", "b", "a", "a", "b"] b = list(filter(lambda x: x == "a", a)) print(b) |
['a', 'a', 'a'] |
Функция reduce() имеет аналогичные с предыдущими функциями аргументы. Она последовательно применяет переданную функцию к каждому элементу, после чего возвращает одно итоговое значение.
Пример работы функции:
from functools import reduce a = [1, 2, 5, 3, 16, 5] b = reduce(lambda a, b: a if (a > b) else b, a) print(b) |
16 |
Функция zip() принимает на вход несколько последовательностей, после чего объединяет их в кортежи и возвращает полученные кортежи. Стоит отметить, что функция остановит свою работу, когда самая короткая последовательность подойдет к концу.
Пример работы функции:
a = [1, 2, 3, 4] b = ["q", "w", "e"] c = [True, False, False, True] res = list(zip(a, b, c)) print(res) |
[(1, 'q', True), (2, 'w', False), (3, 'e', False)] |