Decorator và Generator: hai công cụ mạnh mẽ của Python

Decorator — Trang trí hàm

Decorator cho phép thêm chức năng vào một hàm mà không sửa đổi code gốc. Được sử dụng rộng rãi trong Flask, Django.

import time

def tinh_thoi_gian(func):
    def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        end = time.time()
        print(f"{func.__name__} chạy trong {end - start:.4f} giây")
        return result
    return wrapper

@tinh_thoi_gian
def tinh_tong(n):
    return sum(range(n))

tinh_tong(1_000_000)

Generator — Tiết kiệm bộ nhớ

Generator sử dụng yield thay vì return, sinh ra từng giá trị một — cực kỳ hiệu quả khi xử lý dữ liệu lớn.

def fibonacci(limit):
    a, b = 0, 1
    while a < limit:
        yield a
        a, b = b, a + b

for num in fibonacci(100):
    print(num, end=" ")
# 0 1 1 2 3 5 8 13 21 34 55 89

Khi nào sử dụng?

  • Decorator: logging, caching, kiểm tra quyền, đo hiệu năng
  • Generator: đọc file lớn, stream dữ liệu, lazy evaluation
Chia sẻ bài viết: