Skip to content

Python Decorators Explained

Understand how Python decorators work internally and learn to write your own reusable decorators.

A decorator is a function that wraps another function to extend its behavior without modifying its source.

The mental model

def greet(func):
    def wrapper(*args, **kwargs):
        print("Before call")
        result = func(*args, **kwargs)
        print("After call")
        return result
    return wrapper

@greet
def say_hello():
    print("Hello!")

Decorators replace the original function object. Use functools.wraps to preserve its name and docstring for debugging and documentation.

When to use them

  • Logging and timing
  • Authentication / authorization
  • Caching (memoization)
  • Retry logic for flaky operations
AdSense — in-article slot

Related Reading