A special function that allows you to modify the behavior of a function without changing the underlying code. Similar to Higher Order Function.
Often starts with an @ sign.
Example
def hello(func):
def inner():
print("Hello ")
func()
return inner
@hello
def name():
print("Alice")