Сохраните результат вызова, выведите его через print и верните без изменений. Используйте wraps и произвольные аргументы обёртки.
Печать возвращаемого значения любой функции
Сохраните результат вызова, выведите его через print и верните без изменений. Используйте wraps и произвольные аргументы обёртки.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Создайте декоратор, который:
- Принимает любую функцию в качестве аргумента;
- Выполняет эту функцию;
- После её завершения выводит в консоль результат, полученный от функции.
Декоратор должен работать с функциями любой сигнатуры и не менять их поведение, кроме добавления вывода результата.
Ответ
Сохраните результат вызова, выведите его через print и верните без изменений. Используйте wraps и произвольные аргументы обёртки.
from functools import wraps
def print_result(func):
@wraps(func)
def wrapper(*args, **kwargs):
result = func(*args, **kwargs)
print(result)
return result
return wrapper
Если исходная функция вызывает исключение, оно распространяется как раньше, а результат не печатается, поскольку его нет. Возвращать print(result) нельзя: print возвращает None.
Этот вариант предназначен для синхронных функций. Для корутин необходима async-обёртка с result = await func(...); генератор же вернёт объект генератора, а не автоматически перечисленные элементы. Не применяйте такую диагностику к секретным или персональным результатам без безопасного форматирования.