Создайте обёртку, которая печатает func.name, затем вызывает функцию с исходными аргументами и возвращает результат. Используйте functools.wraps для сохранения метаданных.
Декоратор, выводящий название функции перед её вызовом
Создайте обёртку, которая печатает func.__name__, затем вызывает функцию с исходными аргументами и возвращает результат. Используйте functools.wraps для сохранения метаданных.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Создайте декоратор, который будет печатать имя функции до её выполнения.
Ответ
Создайте обёртку, которая печатает func.name, затем вызывает функцию с исходными аргументами и возвращает результат. Используйте functools.wraps для сохранения метаданных.
Реализация:
from functools import wraps
def print_name(func):
@wraps(func)
def wrapper(*args, **kwargs):
print(func.__name__)
return func(*args, **kwargs)
return wrapper
Применение @print_name над функцией эквивалентно присваиванию function = print_name(function). Имя печатается при каждом вызове, не в момент определения. Обёртка не перехватывает исключения и поддерживает как позиционные, так и именованные аргументы; для методов self передаётся обычным образом.