Decorator là gì ?
Decorator trong Python là một tính năng mạnh mẽ cho phép bạn thêm một chức năng mới cho một hàm, mà không cần thay đổi mã nguồn của hàm đó. Thay vào đó, bạn có thể tạo một decorator mới để thực hiện một tác vụ cụ thể, ví dụ như kiểm tra tham số đầu vào, đo thời gian thực thi, hoặc xác thực người dùng.
Một decorator là một hàm có thể nhận một hàm khác làm đối số và trả về một hàm mới với các chức năng bổ sung. Để áp dụng một decorator cho một hàm, bạn chỉ cần đặt tên decorator trước tên hàm, giống như sau:
pythonCopy code@decorator_name
def my_function():
# Code của hàm
Trong đó decorator_name
là tên của decorator mà bạn muốn áp dụng cho hàm my_function
.
Ví dụ, đây là một decorator đơn giản kiểm tra xem một hàm có chạy được không:
pythonCopy codedef test_decorator(func):
def wrapper():
print("Testing", func.__name__)
func()
print("Test passed")
return wrapper
@test_decorator
def my_function():
print("Hello, world!")
my_function()
Kết quả khi chạy đoạn mã trên là:
Copy codeTesting my_function
Hello, world!
Test passed
Như vậy, khi gọi hàm my_function
, decorator test_decorator
đã tự động thêm một chức năng kiểm tra vào trước và sau khi hàm chạy.
Chức năng của Decorator trong python
Chức năng của decorator trong Python là cho phép bạn thêm một chức năng mới cho một hàm hoặc một lớp mà không phải sửa đổi mã nguồn của chúng. Bằng cách sử dụng decorator, bạn có thể tái sử dụng các chức năng thường được sử dụng trong các hàm hoặc lớp khác mà không phải sao chép mã nguồn lại nhiều lần.
Ví dụ, bạn có thể sử dụng decorator để:
- Thêm chức năng ghi log: decorator có thể ghi lại thời gian, thông tin hàm, tham số đầu vào và kết quả trả về của một hàm. Điều này giúp bạn theo dõi quá trình thực thi của chương trình và giải quyết các lỗi một cách dễ dàng hơn.
- Thực hiện xác thực người dùng: decorator có thể thực hiện các kiểm tra xác thực người dùng, chẳng hạn như kiểm tra xem người dùng đã đăng nhập hay chưa. Điều này giúp bảo vệ chương trình khỏi những người dùng không được phép truy cập vào chức năng cụ thể.
- Thực hiện đo thời gian thực thi: decorator có thể đo thời gian thực thi của một hàm để bạn có thể tối ưu hóa mã của mình.
- Thêm chức năng caching: decorator có thể lưu trữ kết quả trả về của một hàm vào bộ nhớ cache để giảm thời gian truy vấn dữ liệu từ cơ sở dữ liệu.
- Thêm chức năng tự động tái sử dụng: decorator có thể tái sử dụng kết quả của một hàm đã được tính toán trước đó nếu các tham số đầu vào không thay đổi. Điều này giúp giảm thời gian tính toán của chương trình.
Ngoài ra, decorator còn có thể được sử dụng để thực hiện nhiều chức năng khác tùy thuộc vào nhu cầu của bạn.