Ví dụ về trình trang trí trong python là gì?

Tìm hiểu nghệ thuật viết các hàm của riêng bạn bằng Python, cũng như các khái niệm chính như xác định phạm vi và xử lý lỗi

Xem chi tiết Mũi tên phải

bắt đầu khóa học

Viết hàm trong Python

Người bắt đầu

4 giờ

63. 5K

Học cách sử dụng các phương pháp hay nhất để viết các hàm phức tạp, có thể bảo trì, tái sử dụng với tài liệu tốt

Decorators là một trong những công cụ hữu ích và mạnh mẽ nhất của Python. Chúng được sử dụng để sửa đổi hành vi của chức năng. Trình trang trí cung cấp tính linh hoạt để bọc một chức năng khác để mở rộng hoạt động của chức năng được bọc mà không sửa đổi vĩnh viễn chức năng đó

Trong Decorators, các hàm được truyền dưới dạng đối số vào một hàm khác và sau đó được gọi bên trong hàm bao bọc

Nó còn được gọi là lập trình meta trong đó một phần của chương trình cố gắng thay đổi một phần khác của chương trình tại thời điểm biên dịch

Trước khi hiểu về Decorator, chúng ta cần biết một số khái niệm quan trọng về Python

Các chức năng trong Python là gì?

Python có một tính năng thú vị nhất là mọi thứ được coi là một đối tượng, ngay cả các lớp hoặc bất kỳ biến nào chúng ta định nghĩa trong Python cũng được coi là một đối tượng. Các hàm là đối tượng hạng nhất trong Python vì chúng có thể tham chiếu đến, chuyển đến một biến và cũng được trả về từ các hàm khác. Ví dụ được đưa ra dưới đây

đầu ra

Trong chương trình trên, khi chúng ta chạy mã, nó cho kết quả giống nhau cho cả hai chức năng. Hàm func2 được gọi là hàm func1 và đóng vai trò là hàm. Chúng ta cần hiểu khái niệm sau về hàm

  • Hàm có thể được tham chiếu và chuyển đến một biến cũng như được trả về từ các hàm khác
  • Các hàm có thể được khai báo bên trong một hàm khác và được truyền dưới dạng đối số cho một hàm khác

chức năng bên trong

Python cung cấp cơ sở để xác định chức năng bên trong chức năng khác. Các loại chức năng này được gọi là chức năng bên trong. Xem xét ví dụ sau

đầu ra

We are in first function
This is first child function
This is second child function

Trong chương trình trên, các hàm con được khai báo như thế nào không quan trọng. Việc thực thi hàm con có tác dụng đối với đầu ra. Các hàm con này được giới hạn cục bộ với hàm func[] nên không thể gọi chúng một cách riêng biệt

Hàm chấp nhận hàm khác làm đối số còn được gọi là hàm bậc cao. Xem xét ví dụ sau

đầu ra

Trong chương trình trên, chúng ta đã truyền hàm sub[] và hàm add[] làm đối số trong hàm operator[]

Một hàm có thể trả về một hàm khác. Xem xét ví dụ dưới đây

đầu ra

Trong chương trình trên, hàm hi[] được lồng bên trong hàm hello[]. Nó sẽ trả về mỗi khi chúng ta gọi hi[]

Chức năng trang trí với các tham số

Hãy lấy một ví dụ để hiểu chức năng trang trí được tham số hóa

đầu ra

Trình trang trí cú pháp

Trong chương trình trên, chúng ta đã trang trí out_div[] hơi cồng kềnh. Thay vì sử dụng phương pháp trên, Python cho phép sử dụng trình trang trí một cách dễ dàng với @symbol. Đôi khi nó được gọi là cú pháp "pie"

đầu ra

Tái sử dụng trang trí

Chúng ta cũng có thể sử dụng lại trình trang trí bằng cách gọi lại hàm trang trí đó. Hãy biến trình trang trí thành mô-đun của riêng nó có thể được sử dụng trong nhiều chức năng khác. Tạo một tệp có tên mod_decorator. py với đoạn mã sau

Chúng tôi có thể nhập mod_decorator. py trong tập tin khác

đầu ra

Trình trang trí Python có đối số

Chúng tôi muốn truyền một số đối số trong hàm. Hãy làm điều đó trong đoạn mã sau

đầu ra

TypeError: display[] missing 1 required positional argument: 'name'

Như chúng ta có thể thấy, hàm không chấp nhận đối số. Chạy mã này gây ra lỗi. Chúng ta có thể sửa lỗi này bằng cách sử dụng *args và **kwargs trong hàm bao bọc bên trong. Sửa đổi trang trí. py như sau

Bây giờ wrapper_function[] có thể chấp nhận bất kỳ số lượng đối số nào và chuyển chúng vào hàm

đầu ra

Trả về các giá trị từ các hàm được trang trí

Chúng ta có thể kiểm soát kiểu trả về của hàm được trang trí. Ví dụ được đưa ra dưới đây

đầu ra

We are created greeting
We are created greeting

trang trí ưa thích

Hãy cùng tìm hiểu những người trang trí lạ mắt qua chủ đề sau

Trang trí lớp học

Python cung cấp hai cách để trang trí một lớp. Đầu tiên, chúng ta có thể trang trí phương thức bên trong một lớp; . @classmethod và @staticmethod xác định các phương thức bên trong lớp không được kết nối với bất kỳ phiên bản nào khác của lớp. @property thường được sử dụng để sửa đổi getters và setters của một thuộc tính lớp. Hãy hiểu nó bằng ví dụ sau

Thí dụ. 1- @property decorator - Bằng cách sử dụng nó, chúng ta có thể sử dụng hàm lớp như một thuộc tính. Hãy xem xét đoạn mã sau

đầu ra

Name: John
Grade: B
John got grade B

Thí dụ. 2 - @staticmethod decorator- @staticmethod được sử dụng để định nghĩa một phương thức tĩnh trong lớp. Nó được gọi bằng cách sử dụng tên lớp cũng như thể hiện của lớp. Hãy xem xét đoạn mã sau

đầu ra

Lớp đơn

Một lớp đơn chỉ có một thể hiện. Có nhiều singletons trong Python bao gồm True, None, v.v.

Đồ trang trí làm tổ

Chúng ta có thể sử dụng nhiều decorator bằng cách chồng chúng lên nhau. Hãy xem xét ví dụ sau

Trong đoạn mã trên, chúng tôi đã sử dụng trình trang trí lồng nhau bằng cách xếp chồng chúng lên nhau

Trình trang trí có đối số

Việc truyền đối số trong trình trang trí luôn hữu ích. Trình trang trí có thể được thực thi nhiều lần theo giá trị đã cho của đối số. Chúng ta hãy xem xét ví dụ sau

đầu ra

JavatPoint
JavatPoint
JavatPoint
JavatPoint
JavatPoint

Trong ví dụ trên, @repeat đề cập đến một đối tượng chức năng có thể được gọi trong một chức năng khác. @repeat[num = 5] sẽ trả về một hàm hoạt động như một công cụ trang trí

Đoạn mã trên có thể trông phức tạp nhưng nó là mẫu trang trí được sử dụng phổ biến nhất trong đó chúng tôi đã sử dụng một def bổ sung để xử lý các đối số cho trình trang trí

Ghi chú. Trình trang trí có đối số không được sử dụng thường xuyên trong lập trình, nhưng nó mang lại sự linh hoạt. Chúng ta có thể sử dụng nó có hoặc không có đối số

trang trí nhà nước

Trang trí trạng thái được sử dụng để theo dõi trạng thái của trang trí. Hãy để chúng tôi xem xét ví dụ nơi chúng tôi đang tạo một công cụ trang trí đếm số lần hàm được gọi

đầu ra

Call 1 of 'say_hello'
Say Hello
Call 2 of 'say_hello'
Say Hello

Trong chương trình trên, trạng thái đại diện cho số lần gọi hàm được lưu trữ trong. num_calls trên hàm bao bọc. Khi ta gọi say_hello[] nó sẽ hiển thị số lần gọi hàm

Các lớp học với tư cách là người trang trí

Các lớp học là cách tốt nhất để duy trì trạng thái. Trong phần này, chúng ta sẽ tìm hiểu cách sử dụng một lớp như một công cụ trang trí. Ở đây chúng ta sẽ tạo một lớp chứa __init__[] và lấy func làm đối số. Lớp cần có thể gọi được để nó có thể thay thế cho chức năng được trang trí

Để tạo một lớp có thể gọi được, chúng tôi triển khai phương thức __call__[] đặc biệt

đầu ra

Call 1 of 'say_hello'
Say Hello
Call 2 of 'say_hello'
Say Hello
Call 3 of 'say_hello'
Say Hello

Phương thức __init__[] lưu trữ tham chiếu đến hàm và có thể thực hiện bất kỳ khởi tạo bắt buộc nào khác

Các loại trình trang trí trong Python là gì?

Trên thực tế, có hai loại trình trang trí trong Python — trình trang trí lớp và trình trang trí chức năng — nhưng tôi sẽ tập trung vào trình trang trí chức năng ở đây.

Trình trang trí trong Python với ví dụ w3schools là gì?

Trình trang trí trong siêu lập trình Python là một dạng cụ thể của hàm nhận các hàm làm đầu vào và trả về một hàm mới làm đầu ra . Có một số trình trang trí tích hợp viz. @classmethod. @staticmethod.

Trang trí trong Python với các câu hỏi phỏng vấn ví dụ là gì?

Khi chúng tôi nhắc đến từ "trang trí", bạn nghĩ đến điều gì? . Một ví dụ là khi chúng ta treo một khung tranh vào tường để làm nổi bật căn phòng. Trình trang trí trong Python thêm một số tính năng hoặc chức năng vào chức năng hiện có mà không thay đổi chức năng đó .

Việc sử dụng trình trang trí thuộc tính với ví dụ là gì?

@property là một công cụ trang trí tích hợp sẵn cho hàm property[] trong Python. Nó được sử dụng để cung cấp chức năng "đặc biệt" cho một số phương thức nhất định để làm cho chúng hoạt động như getters, setters hoặc deleters khi chúng ta định nghĩa các thuộc tính trong một lớp . Bây giờ bạn đã quen thuộc với các decorator, hãy xem một kịch bản thực tế về việc sử dụng @property.

Chủ Đề