Декоратор, выводящий рекламный текст перед результатом функции

Создайте обёртку с *args и **kwargs, напечатайте сообщение, затем вызовите исходную функцию и верните её результат. wraps сохранит имя, описание и ссылку на оригинал.

Короткий ответ

Что ответить на собеседовании

Создайте обёртку с *args и **kwargs, напечатайте сообщение, затем вызовите исходную функцию и верните её результат. wraps сохранит имя, описание и ссылку на оригинал.

Подробный разбор

Ответ с пояснениями

Условие

Создайте универсальный декоратор, который перед тем, как вернуть значение любой функции, выводит рекламное сообщение. Декоратор должен корректно обрабатывать функции с произвольным набором позиционных и именованных аргументов, не изменяя их основную логику. После применения декоратора оригинальная функция должна работать как обычно, но её вывод будет предваряться рекламным текстом, заданным внутри декоратора.

Ответ

Создайте обёртку с *args и **kwargs, напечатайте сообщение, затем вызовите исходную функцию и верните её результат. wraps сохранит имя, описание и ссылку на оригинал.

Для обычных синхронных функций:

from functools import wraps

def advertise(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        print('Попробуйте новые возможности нашего сервиса!')
        return func(*args, **kwargs)
    return wrapper

Сообщение выводится перед выполнением функции, поэтому предваряет и её собственную печать. Возвращаемое значение и исключения сохраняются. Если сообщение нужно только после успешного вычисления, сначала сохраните result = func(...), затем печатайте и возвращайте result. Для генераторов и async-функций требуется уточнить момент фактического исполнения.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее