Vì vậy, chúng ta hãy nói về một số ứng dụng thực tế của decorator.
Ý tôi là, chúng ta đã thấy chúng trong các lớp học, phải không?
Chúng ta đã thấy phương thức lớp và phương thức tĩnh như thế nào, chúng ta có thể tạo phương thức lớp và phương thức tĩnh trên lớp
mà lớp trực tiếp có thể sử dụng.
Và nếu bạn không nhớ những điều này, chỉ cần quay lại những video đó.
Nhưng tôi muốn cho bạn xem một trong những ví dụ yêu thích của tôi về một người trang trí.
Chúng tôi sẽ tạo ra của riêng mình.
Những gì chúng tôi sẽ làm là tôi muốn có một buổi biểu diễn.
Người trang trí.
Và nhân tiện, trình trang trí này không tồn tại trong Python.
Chúng tôi sẽ xây dựng nó từ đầu.
Những gì tôi muốn làm là có thể có một trình trang trí hiệu suất mà tôi có thể sử dụng trong quá trình kiểm tra mã của mình để xem
mã của tôi chạy nhanh như thế nào.
Ví dụ, nếu tôi có một hàm, hãy nói rằng điều đó mất nhiều thời gian.
Vâng, một thời gian dài để hoàn thành.
Vì vậy, tôi sẽ thực hiện một vòng lặp thực sự dài và nói với tôi trong phạm vi giả sử.
Tất cả những con số này và tôi sẽ thực hiện một phép tính ngẫu nhiên nhân với năm lần.
Chức năng này.
Tôi muốn biết nó hoạt động tốt như thế nào, cần bao nhiêu mili giây để hoàn thành việc này.
Vậy làm thế nào chúng ta có thể thắt chặt điều đó?
Đầu tiên, tôi sẽ làm điều gì đó mà chúng ta chưa nói đến, đó là chúng ta sẽ tìm hiểu về các mô-đun và các
mô-đun được xây dựng trong.
Vì vậy, hiện tại, chúng ta sẽ không nói về điều này quá nhiều, nhưng chúng ta sẽ nhập từ mô-đun
thời gian một thứ gọi là thời gian tốt.
Một lần nữa, một số điều mà chúng ta sẽ nói đến trong phần mô-đun của khóa học.
Về cơ bản tôi đang nói, này, khi tôi cài đặt Python hoặc trong trường hợp của tôi khi tôi sử dụng ripple này, nó
có quyền truy cập vào thời điểm này nếu tôi yêu cầu.
Và trong trường hợp này, tôi đang nói, này, tôi muốn sử dụng đối tượng hoặc mô-đun thời gian này mà tôi nhận được từ Python.
Và ở đây, chúng tôi sẽ tạo trang trí của chúng tôi theo mẫu mà chúng tôi đã học.
Tôi sẽ nói xác định hiệu suất.
Và hiệu suất sẽ chấp nhận một chức năng giống như chúng ta đã thấy trước đây.
Và ở đây, chúng tôi sẽ có trình bao bọc của chúng tôi.
Vì vậy, giả sử hàm wrapper và hàm wrapper.
Nếu bạn nhớ, nó sẽ linh hoạt bằng cách sử dụng các cung sao và cung từ khóa ngôi sao.
Vì vậy, chúng ta có thể truyền cho nó bao nhiêu tham số mà chúng ta muốn, bởi vì chúng ta không biết hàm này như thế nào, nó
sẽ có bao nhiêu tham số.
Và tôi muốn có thể sử dụng hiệu suất trên tất cả các chức năng của mình.
Bây giờ ở đây trước tiên, những gì chúng ta sẽ làm là chúng ta sẽ có kết quả của hàm.
Là.
Chức năng mà chúng tôi nhận được ngay tại đây và sau đó chỉ cần nói.
Chạy hàm với vòng cung sao và vòng cung từ khóa dấu sao.
Và cuối cùng, khi kết thúc việc này, tôi muốn trả kết quả.
Và cuối cùng chúng tôi sẽ trả lại rapper.
Vì vậy, không có gì chúng ta chưa thấy trước đây.
Tôi có thể vừa thực hiện quay lại ở đây hoặc chỉ chạy chức năng, nhưng tôi sẽ cho bạn thấy lý do tại sao tôi lại làm theo cách
này trong giây lát.
Hiện tại, chức năng của chúng ta không thực sự làm được gì cả.
Nếu tôi bấm Chạy.
Chà, không có gì xảy ra nếu tôi làm trong một thời gian dài và tôi chạy chức năng này.
Nó chỉ mất một thời gian dài để chạy.
Nhưng kia là nó.
Chẳng có gì xảy ra.
Đây là lúc chúng ta làm cho mọi thứ trở nên thú vị.
Chúng ta muốn tính toán từ khi bắt đầu chạy hàm này đến khi kết thúc chạy hàm này, và chúng ta có thể
sử dụng mô-đun thời gian để thực hiện việc này.
Tôi có thể tạo một thời gian thay đổi cho lúc bắt đầu và chỉ cần nói thời gian.
Vì vậy, tôi đang chạy hàm thời gian này sẽ bắt đầu.
Một thời gian và nói, này, lần đầu tiên này sẽ là một PT.
Và sau chức năng này, chức năng chính của chúng tôi, lâu năm, sẽ được chạy.
Tôi sẽ nói hai và nói, Này, mấy giờ rồi?
Ngay lập tức.
Vì vậy, lần này chúng ta sẽ kiểm tra xem bây giờ là mấy giờ.
Và sau đó chúng ta sẽ chạy chức năng này và lần này là kiểm tra thời gian.
Và tuy nhiên có nhiều khác biệt giữa hai phần này là thời gian phần này diễn ra trong bao lâu.
Đúng.
Vì vậy, tất cả những gì chúng ta làm là in một chuỗi F và nói rằng nó mất T một trừ đi hai.
Đúng.
Và điều này thực sự trả về tính bằng mili giây.
Vì vậy, tôi sẽ chỉ nói GM trong mili giây.
Và đó là nó.
Tôi đã gói chức năng của mình chỉ với phần thời gian bổ sung này và sau đó tôi sẽ in ngay sau khi chúng tôi chạy
chức năng, mất bao lâu.
Vì vậy, chúng ta hãy kiểm tra nó ra.
Nếu bây giờ tôi chạy chức năng thời gian dài của mình ngay tại đây và tôi nhấp vào Chạy.
Được rồi, tôi nhận được một số trừ vì tôi đã nhầm lẫn ở đây.
Đây phải là t hai trừ rt một vì thời gian trên RT một thời gian trôi qua và sau đó TT hai.
Vì vậy, TT hai sẽ luôn lớn hơn TW một.
Nếu tôi chạy cái này.
Được rồi.
Nó mất 0. 16 mili giây.
Tôi nghĩ rằng đây thực sự là vài giây.
Bây giờ chúng ta hãy làm cho fonction dài này thậm chí dài hơn nếu tôi làm như thế này và nhấp vào Run.
Oh Boy.
Điều đó đã mất 1. 9 giây.
Điều gì sẽ xảy ra nếu tôi làm cho nó dài hơn nữa nếu tôi nhấp vào Chạy?
Và đây là phần mà tôi tiếp tục nói cho đến khi chức năng chạy, bởi vì sẽ có một khoảng lặng khó
xử.
Nếu không, hy vọng điều này sẽ sớm kết thúc vì tôi không còn gì để nói nữa.
Nào.
Điều này đang trở nên khó xử.
Được rồi, thôi nào.
Oh Boy.
Hừ!
Tôi sẽ tua nhanh qua đây.
Oh Boy.
Mất 19 giây.
Đó là.
Điều đó khá tệ.
Nhưng bây giờ tôi có bộ trang trí này mà tôi có thể cung cấp cho khá nhiều chức năng trong chương trình của mình và thực sự đo lường
hiệu suất của chức năng của tôi.
Khá hữu ích, phải không?
Tôi có thể có đoạn mã này và trước khi nói rằng tôi triển khai mã của mình hoặc đưa mã của tôi ra ngoài thế giới.
Tôi có thể kiểm tra xem các chức năng của mình hoạt động như thế nào và có thể tôi có thể tối ưu hóa mọi thứ theo những cách khác nhau.
Rất, rất hữu ích.
Và tôi đã làm điều đó chỉ trong một vài dòng mã.
Chín dòng mã.
Bây giờ, hãy nhớ bạn, trình trang trí hiệu suất này phụ thuộc vào máy tính và tốc độ CPU và bộ nhớ trên máy
tính của bạn.
Vì vậy, đối với những gì tôi mất 19 giây có thể khiến bạn mất nhiều hơn hoặc ít hơn rất nhiều tùy thuộc vào máy của bạn.
Nhưng đây là một cách hay để so sánh các chức năng một cách tương đối, tôi hy vọng sau điều này, bạn sẽ thấy được sức mạnh của các trình trang trí.
Decorator được sử dụng rất nhiều trong các thư viện và khuôn khổ Python.
Chúng tôi là những framework mà chúng tôi sẽ nói đến, như Django và Flask sử dụng decorator.
Có thể bạn muốn có một trình trang trí xác thực nào đó, vì vậy bạn xác thực nó trong đó
mỗi chức năng chỉ có thể chạy nếu người dùng được xác thực, có thể là họ.
Họ có đặc quyền để chạy một chức năng chẳng hạn như đăng nhập vào một trang web.
Hoặc có thể bạn chỉ cần đăng nhập hoặc ghi nhật ký.
Người trang trí chỉ ghi nhật ký và cho cơ sở dữ liệu của bạn biết rằng, này, ai đó đã đăng nhập vào hệ thống của bạn
hoặc Này, ai đó đã mua thứ gì đó từ Amazon.
Hoặc Này, ai đó vừa yêu cầu một lời mời kết bạn.
Có rất nhiều cách sử dụng cho trang trí và trang trí là một chủ đề khó.
Bạn sẽ không thấy chúng trên toàn bộ mã python.
Chúng chỉ là một tính năng bổ sung mà bạn có thể sử dụng khi ngày càng trở nên thoải mái hơn với Python.
Nhưng tôi hy vọng đến cuối cùng, bạn sẽ ít nhất hiểu được chúng để có thể một ngày nào đó xây dựng của riêng bạn hoặc sử dụng
những cái được tạo sẵn bởi các thư viện và khung công tác.
Hẹn gặp lại các bạn trong phần tiếp theo.
Tạm biệt.