Trang trí trong phân tích python vidhya

Trong bài viết này, chúng ta sẽ thấy các decorator mạnh mẽ như thế nào. Nếu bạn chưa quen với Python [và thậm chí nếu bạn chưa biết], có thể bạn chưa bao giờ nghe nói về cấu trúc này. Nó là một cái gì đó cụ thể đối với Python, cho phép xác định một số hành vi chung chung cho nhiều phương thức trong một hàm riêng biệt

Ví dụ: giả sử rằng chúng ta có các phương thức sau

def sum[a, b]:
return a+b
def subtract[a, b]:
return a-b

Bây giờ chúng tôi muốn in kết quả ra bàn điều khiển, trước khi trả lại. Chúng ta nên làm gì? . Nhưng nếu sau đó chúng tôi quyết định lưu nó vào một tệp thì sao?

Thay vào đó, chúng ta có thể tạo một trình trang trí

@log_result
def sum[a, b]:
return a+b
@log_result
def subtract[a, b]:
return a-b
2 và thêm nó vào các phương thức

@log_result
def sum[a, b]:
return a+b
@log_result
def subtract[a, b]:
return a-b

Và bây giờ nếu chúng ta muốn thay đổi nơi chúng ta viết đầu ra, chúng ta chỉ cần thay đổi mã bên trong

@log_result
def sum[a, b]:
return a+b
@log_result
def subtract[a, b]:
return a-b
2

một trang trí là gì?

Bây giờ chúng ta đã biết cách sử dụng decorator, nhưng chính xác thì decorator là gì?

Để cung cấp cho bạn một định nghĩa chính thức¹,

Trình trang trí là một chức năng nhận một chức năng khác và mở rộng hành vi của chức năng sau mà không sửa đổi nó một cách rõ ràng

Hãy chia nhỏ từng mảnh này

Trước hết, một trình trang trí là một hàm nhận một hàm khác làm tham số. điều này có nghĩa là chúng tôi sẽ định nghĩa trình trang trí

@log_result
def sum[a, b]:
return a+b
@log_result
def subtract[a, b]:
return a-b
2 là

def log_result[func]:

Sau đó, chúng ta cần sửa đổi chức năng này và trả lại phiên bản đã sửa đổi

Vì vậy, chúng ta có thể tạo một hàm bên trong [mà tôi gọi là

@log_result
def sum[a, b]:
return a+b
@log_result
def subtract[a, b]:
return a-b
5 cho đơn giản] thực thi
@log_result
def sum[a, b]:
return a+b
@log_result
def subtract[a, b]:
return a-b
6 , in ra kết quả và cuối cùng trả về giá trị này

________số 8

Cuối cùng, trình trang trí phải trả lại hàm đã sửa đổi

def log_result[func]:
def inner[]:
res = func[]
print["The result is ", res]
return res

return inner

Chúng tôi đã tạo trang trí đầu tiên của mình. Vâng, không thực sự. Nó chỉ hoạt động nếu chức năng chúng ta thêm vào không có tham số. Ví dụ

@log_result
def sum[a, b]:
return a+b
@log_result
def subtract[a, b]:
return a-b
0

Khi chúng ta gọi hàm này log sẽ in ra màn hình

@log_result
def sum[a, b]:
return a+b
@log_result
def subtract[a, b]:
return a-b
1

Tuy nhiên, nếu chúng tôi cố gắng sử dụng nó với các phương thức

@log_result
def sum[a, b]:
return a+b
@log_result
def subtract[a, b]:
return a-b
7 và
@log_result
def sum[a, b]:
return a+b
@log_result
def subtract[a, b]:
return a-b
8 trước đó, mã sẽ không chạy chính xác

Vấn đề là chúng ta chưa cung cấp cho hàm đã sửa đổi khả năng nhận các tham số sẽ được chuyển đến

@log_result
def sum[a, b]:
return a+b
@log_result
def subtract[a, b]:
return a-b
6. May mắn thay, điều này có thể được giải quyết dễ dàng. Ta sẽ định nghĩa lại
@log_result
def sum[a, b]:
return a+b
@log_result
def subtract[a, b]:
return a-b
5 như sau

@log_result
def sum[a, b]:
return a+b
@log_result
def subtract[a, b]:
return a-b
6

Ghi chú. nếu bạn không biết

def log_result[func]:
1 và
def log_result[func]:
2 là gì, hãy xem bài viết này

Giờ đây,

@log_result
def sum[a, b]:
return a+b
@log_result
def subtract[a, b]:
return a-b
5có thể nhận bất kỳ số lượng tham số nào và chuyển trực tiếp chúng vào hàm. Chúng tôi đã thực hiện nó

@log_result
def sum[a, b]:
return a+b
@log_result
def subtract[a, b]:
return a-b
0Trang trí với các tham số

Cuối cùng, chúng tôi có thể muốn chuyển một số tham số bổ sung cho trình trang trí. Ví dụ: chúng tôi có thể muốn in cả tên cùng với kết quả để chúng tôi biết nhật ký này đến từ thao tác nào

Để làm như vậy, chúng ta cần sửa đổi một chút chức năng

@log_result
def sum[a, b]:
return a+b
@log_result
def subtract[a, b]:
return a-b
1

Hãy xem chuyện gì đang xảy ra. Hàm

def log_result[func]:
4 lấy chuỗi tên và trả về trình trang trí, sau đó sẽ được áp dụng cho một hàm

Nó có thể được sử dụng chính xác như trước

@log_result
def sum[a, b]:
return a+b
@log_result
def subtract[a, b]:
return a-b
0

Và kết quả sẽ là

@log_result
def sum[a, b]:
return a+b
@log_result
def subtract[a, b]:
return a-b
1Kết luận

Cảm ơn bạn đã đọc đến cuối. Dưới đây là một số tài nguyên khác về trang trí

Sơ lược về Python Decorators - Real Python

cập nhật. 22/08/2018. Cập nhật lớn bổ sung thêm nhiều ví dụ và trang trí cao cấp hơn 12/01/2016. Đã cập nhật các ví dụ thành…

trăn thật. com

PEP 318 - Trình trang trí cho các hàm và phương thức

Tài liệu này nhằm mô tả cú pháp của trình trang trí và quy trình dẫn đến các quyết định được đưa ra…

www. con trăn. tổ chức

Thêm nội dung bằng tiếng Anh. io. Đăng ký nhận bản tin hàng tuần miễn phí của chúng tôi. Nhận quyền truy cập độc quyền để viết các cơ hội và lời khuyên trong cộng đồng của chúng tôi Discord

Trình trang trí Python trong Python là gì?

Trình trang trí là mẫu thiết kế trong Python cho phép người dùng thêm chức năng mới vào đối tượng hiện có mà không sửa đổi cấu trúc của đối tượng . Trình trang trí thường được gọi trước khi định nghĩa chức năng bạn muốn trang trí.

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

Trong Python, chúng ta cũng có thể trả về hàm dưới dạng giá trị trả về. Ví dụ: def lời chào[tên]. chắc chắn xin chào[]. trả về "Xin chào," + tên + ". " trả lại lời chào lời chào = lời chào["Atlantis"] print[lời chào[]] # bản in "Xin chào, Atlantis. " # Đầu ra. Xin chào, Atlantis.

Chúng ta có thể sử dụng 2 trình trang trí trong Python không?

Python cho phép chúng ta triển khai nhiều trình trang trí cho một hàm . Nó làm cho các bộ trang trí trở nên hữu ích cho các khối xây dựng có thể tái sử dụng vì nó tích lũy nhiều hiệu ứng cùng nhau. Nó còn được gọi là trình trang trí lồng nhau trong Python.

Trình trang trí được sử dụng như thế nào trong Python?

Bạn sẽ sử dụng trình trang trí khi bạn cần thay đổi hành vi của một hàm mà không cần sửa đổi chính hàm đó . Một vài ví dụ điển hình là khi bạn muốn thêm ghi nhật ký, kiểm tra hiệu suất, thực hiện lưu vào bộ nhớ đệm, xác minh quyền, v.v. Bạn cũng có thể sử dụng một mã khi cần chạy cùng một mã trên nhiều chức năng.

Chủ Đề