Декоратор, который будет писать имя функции до ее вызова
1️⃣ Как кратко ответить
Декоратор — это функция, которая принимает другую функцию и возвращает новую функцию с дополнительной функциональностью. Чтобы создать декоратор, который выводит имя функции перед её вызовом, определите функцию-декоратор, которая оборачивает исходную функцию, добавляя вывод её имени перед вызовом.
2️⃣ Подробное объяснение темы
Декораторы в Python — это мощный инструмент, который позволяет модифицировать поведение функции или метода. Они часто используются для добавления дополнительной функциональности к существующим функциям без изменения их кода. Декораторы принимают функцию в качестве аргумента и возвращают новую функцию, которая обычно вызывает оригинальную функцию, но с добавленной функциональностью.
Пример декоратора, который выводит имя функции перед её вызовом
def print_function_name_decorator(func):
"""
Декоратор, который выводит имя функции перед её вызовом.
:param func: функция, которую нужно обернуть
:return: обёрнутая функция с дополнительной функциональностью
"""
def wrapper(*args, **kwargs):
# Выводим имя функции, используя атрибут __name__
print(f"Calling function: {func.__name__}")
# Вызываем оригинальную функцию с переданными аргументами и возвращаем её результат
return func(*args, **kwargs)
# Возвращаем обёрнутую функцию
return wrapper
# Пример использования декоратора
@print_function_name_decorator
def example_function():
"""
Пример функции, которая ничего не делает.
"""
print("Function is running.")
# Вызов функции
example_function()
Объяснение кода
-
Определение декоратора:
print_function_name_decorator— это функция-декоратор, которая принимает функциюfuncв качестве аргумента.- Внутри декоратора определяется функция
wrapper, которая оборачивает оригинальную функцию.
-
Функция-обёртка
wrapper:print(f"Calling function: {func.__name__}")— выводит имя функции перед её вызовом.func.__name__— это атрибут, который содержит имя функции.return func(*args, **kwargs)— вызывает оригинальную функцию с переданными аргументами и возвращает её результат.*argsи**kwargsпозволяют передавать произвольное количество позиционных и именованных аргументов.
-
Возврат обёрнутой функции:
- Декоратор возвращает функцию
wrapper, которая теперь содержит дополнительную функциональность — вывод имени функции перед её вызовом.
- Декоратор возвращает функцию
-
Применение декоратора:
@print_function_name_decorator— это синтаксический сахар, который применяется перед определением функцииexample_function. Он автоматически оборачиваетexample_functionвwrapper.
-
Вызов функции:
- При вызове
example_function()сначала выполняется код вwrapper, который выводит имя функции, а затем вызывает оригинальнуюexample_function.
- При вызове
Этот подход позволяет легко добавлять и изменять функциональность функций без изменения их исходного кода, что делает код более модульным и удобным для поддержки.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться