Decorators in Python

Functions that modify other functions

1. What is a Decorator?

Decorator ek function hota hai jo doosre function ko modify/add functionality karta hai bina uske code ko directly change kiye.

2. Functions as First-Class Citizens

Python me functions ko variables me assign kar sakte hain aur unhe dusre functions ko pass kar sakte hain.

def greet(name):
    return f"Hello, {name}"

say_hello = greet
print(say_hello("AIkiPadhai"))  # Hello, AIkiPadhai

3. Simple Decorator Example

def my_decorator(func):
    def wrapper():
        print("Before function runs")
        func()
        print("After function runs")
    return wrapper

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

say_hello()

Output:

Before function runs
Hello!
After function runs

4. Decorator with Arguments

def log_arguments(func):
    def wrapper(*args, **kwargs):
        print(f"Arguments: {args}, {kwargs}")
        return func(*args, **kwargs)
    return wrapper

@log_arguments
def add(a, b):
    return a + b

print(add(3, 5))

Output:

Arguments: (3, 5), {}
8

5. Real World Example

Decorators ka use logging, authentication, timing aur caching me hota hai.

import time

def timer(func):
    def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        end = time.time()
        print(f"{func.__name__} took {end-start:.4f} seconds")
        return result
    return wrapper

@timer
def slow_function():
    time.sleep(2)
    print("Finished!")

slow_function()

Output:

Finished!
slow_function took 2.0003 seconds

Summary