Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Билеты ВвИТ, СиСС, Экзамен 3 сем, 2021.docx
Скачиваний:
33
Добавлен:
21.01.2022
Размер:
41.28 Кб
Скачать

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)