Trung BìnhPython iconPython

Decorator là gì? Viết decorator đơn giản.

Decorator là higher-order function nhận một function và trả về function mới với hành vi bổ sung — cú pháp @decorator là syntactic sugar.

Dùng @functools.wraps để giữ metadata của function gốc.

python
import functools, time

def timer(func):
    @functools.wraps(func)  # Giữ __name__, __doc__
    def wrapper(*args, **kwargs):
        start = time.perf_counter()
        result = func(*args, **kwargs)
        print(f"{func.__name__}: {time.perf_counter()-start:.4f}s")
        return result
    return wrapper

@timer
def slow():
    time.sleep(1)

Pitfall: Không dùng @functools.wraps → mất __name__, __doc__ của function gốc.

Xem toàn bộ Python cùng filter theo level & chủ đề con.

Mở danh sách Python