In Python, a decorator is a function that takes another function as input and returns a new function that usually extends or modifies the behavior of the input function without changing its source code. Decorators are a powerful feature of Python that allows you to add extra functionality to existing functions or classes, without modifying their source code.
Here’s an example of a simple decorator:
python
def my_decorator(func):
def wrapper():
print("Before the function is called.")
func()
print("After the function is called.")
return wrapper
@my_decorator
def say_hello():
print("Hello!")
# Call the decorated function
say_hello()
In this example, we define a decorator called `my_decorator`, which takes a function `func` as input and returns a new function called `wrapper`. The `wrapper` function adds some extra behavior before and after the original function is called. We then apply the decorator to a function called `say_hello` using the `@` syntax. When we call `say_hello()`, the decorator is applied automatically, and the output will be:
Before the function is called. Hello! After the function is called.
Note that when we apply the decorator to the function using the `@` syntax, we are effectively reassigning the name `say_hello` to the new decorated function (`wrapper` in this case).
You can also define decorators that take arguments:
python
def repeat(num):
def my_decorator(func):
def wrapper():
for i in range(num):
func()
return wrapper
return my_decorator
@repeat(num=3)
def say_hello():
print("Hello!")
# Call the decorated function
say_hello()
In this example, we define a decorator called `repeat`, which takes an argument `num`. The decorator itself returns another decorator called `my_decorator`, which takes a function `func` as input and returns a new function called `wrapper`. The `wrapper` function repeats the original function `num` times. We then apply the `repeat` decorator to a function called `say_hello` using the `@` syntax, passing in the argument `num=3`. When we call `say_hello()`, the decorator is applied automatically, and the output will be:
Hello! Hello! Hello!
This is just a basic overview of decorators in Python. Decorators can be used in many different ways, and there are many advanced techniques for creating and using them.