@my_decorator
def my_function():
pass
Эквивалентно:
def my_function():
pass
my_function = my_decorator(my_function)
В Python декоратор – это мощный и элегантный способ модифицировать или расширить функциональность функций или методов, не изменяя их исходный код.
По сути, декоратор - это функция, которая принимает другую функцию в качестве аргумента, добавляет некоторую новую функциональность, и возвращает модифицированную функцию. Это реализуется с использованием синтаксиса @
.
Ключевые концепции:
Пример:
def my_decorator(func):
def wrapper():
print("Что-то происходит перед вызовом функции.")
func()
print("Что-то происходит после вызова функции.")
return wrapper
@my_decorator
def say_hello():
print("Привет!")
say_hello()
Вывод:
Что-то происходит перед вызовом функции.
Привет!
Что-то происходит после вызова функции.
Объяснение:
my_decorator
– это функция-декоратор. Она принимает функцию func
в качестве аргумента.
wrapper
– это внутренняя функция, которая содержит код, который будет выполняться до и после вызова декорируемой функции.
@my_decorator
над функцией say_hello
эквивалентна записи say_hello = my_decorator(say_hello)
. То есть, функция say_hello
передается в my_decorator
, а возвращенное значение (функция wrapper
) присваивается переменной say_hello
.
Зачем использовать декораторы:
Примеры использования:
В заключение, декораторы – это мощный инструмент в Python, который позволяет улучшить читаемость, расширяемость и поддерживаемость кода. Понимание их принципов работы и вариантов использования является важным навыком для Python-разработчика.