Decorator trong Python khá dễ hiểu và quen thuộc với những lập trình viên Python. Tuy nhiên việc viết Decorator cũng yêu cầu tổng hợp rất nhiều các kỹ năng khác nhau. Để viết Decorator trong Python, trước hết các lập trình viên cần hiểu một số khái niệm sau đây:
Các khái niệm này cũng khá dễ để tìm tài liệu trên mạng, tuy nhiên khái niệm đầu tiên có thể khó hiểu với mọi người nên mình sẽ giải thích khái niệm này. Trong Python, “closures” là các hàm được viết trong thân hàm khác (functions within function), hàm này có thể truy cập các biến ở hàm bên ngoài nó (outer function). Ở đây mình xin phép chỉ đi sâu vào các ứng dụng Python Decorator trong việc phân tích, lưu vết và tính toán hiệu năng.
Với những ứng dụng phức tạp, chúng ta thường xuyên phải lưu các thông số của hệ thống để phục vụ các mục đích khác nhau trong phân tích, tính toán hiệu năng, và ta có thể dùng Decorator để thuận tiện trong các tác vụ này. Chẳng hạn đoạn mã nguồn dưới đây sẽ cho ta thông tin khi nào hàm được gọi, thời gian thực thi của hàm:
Kết quả khi chạy đoạn mã nguồn trên như sau:
Có thể sử dụng Decorator cho mục đích đồng bộ hoá trong khi chạy đa luồng.
ta sử dụng 100 luồng để tăng giá trị của counter, vì vậy giá trị counter sau khi chạy mã nguồn sẽ là 100. Việc sử dụng decorators ở đây để cho việc hàm increment sẽ được đồng bộ trong các luồng.
Decorator có thể sử dụng để viết các hàm xác thực việc đăng nhập vào hệ thống, thường được sử dụng trong các web framework như flask, Django. Một Decorator đơn giản có thể sử dụng như sau:
Decorators Authenticate có chức năng chuyển hướng về trang đăng nhập nếu thông tin người dùng nhập vào xác thực không đúng. Trong trường hợp thông tin đăng nhập chính xác, hàm index sẽ được khởi chạy để đưa người dùng tới trang tiếp theo (index.mako).
Trên đây là một số ứng dụng của Decorator trong Python. Việc sử dụng có thể không hề dễ dàng khi mới tiếp cận với bất cứ lập trình viên nào. Nhưng hiệu quả của nó mang lại lại cực kỳ lớn. Mong rằng qua bài viết này, các bạn sẽ cảm thấy hứng thú với những gì mà Decorators có thể làm được.
Thân Cao Cường
Tham khảo
5 reasons you need to learn to write Python decorators – O’Reilly (oreilly.com)
Closures in Python with Examples - TechVidvan
Python Decorators: What is a Decorator? - DataCamp