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