Explain the concept of decorators in Python and provide an example.
Certainly! Decorators in Python are a way to modify or extend the behavior of functions or methods without changing their actual code. They are denoted by the "@" symbol. Here's a simple example:
def my_decorator(func):
def wrapper():
print("Something is happening before the function is called.")
func()
print("Something is happening after the function is called.")
return wrapper
@my_decorator
def say_hello():
print("Hello!")
say_hello()