Trình trang trí trong Python là một tính năng quan trọng được sử dụng để thêm các chức năng vào một chức năng, đối tượng hoặc mã hiện có mà không sửa đổi cấu trúc của nó vĩnh viễn. Nó cho phép bạn quấn một hàm này sang một hàm khác và mở rộng hành vi của nó. Trình trang trí trong Python thường được gọi trước định nghĩa của chức năng được trang trí
Trước khi tìm hiểu thêm về decorator, điều cần thiết là phải biết thêm về các chức năng. Các hàm trong Python là các đối tượng hạng nhất hỗ trợ các hoạt động khác nhau. Các thuộc tính của hàm và các đối tượng hạng nhất khác có thể được
- Thông qua như một đối số
- Trả về từ một chức năng
- đã sửa đổi
- Được gán cho các biến khác
- Được lưu trữ trong các cấu trúc dữ liệu như bảng băm và danh sách
Khóa đào tạo Python
Tìm hiểu về thao tác dữ liệu trong Python Khám phá khóa họcCú pháp của Python Decorators
Vì bây giờ bạn đã biết một chút về hàm và chức năng của trình trang trí trong Python, nên đã đến lúc làm quen với cú pháp, đó là
def func_name[]
print["Simplilearn"] #mã chức năng
func_name = name_decorator[func_name]
Trong cú pháp trên
- func_name. Tên chức năng
- name_decorator. Tên người trang trí
Python cũng cung cấp một cú pháp đơn giản hơn để viết các trình trang trí trong Python bằng @symbol và tên của trình trang trí. Cách đơn giản hơn để gọi các trình trang trí này còn được gọi là cách cú pháp hoặc cú pháp "chiếc bánh". Với cú pháp đơn giản hơn, mã bằng -
@name_decorator
def func_name[]
in ["Đơn giản hóa"]
Sự khác biệt duy nhất trong việc sử dụng cả hai cú pháp là nếu bạn muốn gán chức năng được trang trí cho một biến khác của hàm, hãy sử dụng cú pháp mở rộng. Mặt khác, nếu bạn định thay đổi các biến và nội dung của cùng một hàm, bạn có thể sử dụng cả cú pháp dài và ngắn
Ví dụ về Trình trang trí trong Python
Hãy cùng xem một ví dụ để hiểu rõ hơn về khái niệm decorators trong Python. Trong ví dụ bên dưới, bạn sẽ tạo một decorator để thêm chức năng chuyển chuỗi từ hàm khác sang chữ hoa
#xác định người trang trí
def name_decorator[chức năng]
#xác định hàm bao bọc
chắc chắn bên trong_wrapper[]
#defining và gọi chức năng thực tế
func_name = chức năng[]
chữ hoa_func = func_name. phía trên[]
in [chữ hoa_func]
trở lại bên trong_wrapper
#định nghĩa hàm sẽ được gọi trong trình trang trí
chắc chắn chào[]
return ["chào mừng bạn đến với simplilearn"]
in [chào[]]
được trang trí = name_decorator[chào]
trang trí[]
in [chào[]]
đầu ra
Trong ví dụ trên, name_decorator[] là trang trí. Chức năng 'chào' đã được trang trí và được gán cho "được trang trí. ” Như bạn có thể thấy, khi bạn in hàm trang trí, nó sẽ in chuỗi ở dạng chữ hoa. Tuy nhiên, khi bạn gọi lại hàm chào, nó sẽ in chuỗi chính xác ở dạng chữ thường. Như vậy chức năng chào vĩnh viễn không bị thay đổi
Trình trang trí trong Python có tham số
Trong ví dụ trên, bạn đã làm việc với một hàm không có bất kỳ tham số nào. Nhưng nếu hàm có tham số thì sao?
def đối số_trang trí [chức năng]
def wrapper_arguments[ar1, ar2]
print["Các tham số được truyền là. {0}, {1}". định dạng[ar1,ar2]]
chức năng [ar1, ar2]
trả lại trình bao bọc_arguments
@arguments_decorator
def Tên[first_name, last_name]
print["Tên tôi là {0} {1}". định dạng [first_name, last_name]]
Tên["George", "Hotz"]
đầu ra
Làm cách nào để sử dụng lại các công cụ trang trí trong Python?
Vì một công cụ trang trí cũng giống như một chức năng bình thường, bạn có thể dễ dàng sử dụng lại nó như những công cụ khác bằng cách di chuyển nó đến mô-đun 'người trang trí'. Trong đoạn mã dưới đây, bạn sẽ tạo một tệp có tên là “decorators. py. ” Tệp sẽ chứa một chức năng trang trí sẽ in một đầu ra nhiều lần. Tiếp theo, bạn sẽ nhập chức năng trang trí trong tệp mã hóa chính và sử dụng lại nó
# mã cho người trang trí. tập tin py
def print_thrice[func]
def wrapper_print_thrice[]
chức năng[]
chức năng[]
chức năng[]
trả lại trình bao bọc_print_thrice
# mã cho chính. tập tin py
từ trang trí nhập print_thrice
@print_thrice
chắc chắn say_name[]
in ["Đơn giản hóa. "]
say_name[]
đầu ra
Như bạn có thể thấy trong kết quả đã nêu ở trên, bạn có thể nhập và sử dụng lại chức năng trang trí print_thrice để in kết quả đầu ra “Simplilearn. " ba lần
Chuỗi nhiều trang trí trong Python
Có thể xâu chuỗi nhiều trình trang trí trong Python. Nó giống như áp dụng nhiều trình trang trí cho một chức năng. Tất cả những gì bạn phải làm là đặt tất cả các trình trang trí trong các dòng riêng biệt trước khi xác định chức năng trình bao bọc. Đây là một ví dụ về trình trang trí chuỗi trong Python
def exclamation_decorator[chức năng]
trình bao bọc def[*args, **kwargs]
in[". "*25]
chức năng [*args, **kwargs]
in[". "*25]
trả lại trình bao bọc
def hashtag_decorator[chức năng]
trình bao bọc def[*args, **kwargs]
in["#" * 25]
chức năng [*args, **kwargs]
in["#" * 25]
trả lại trình bao bọc
@exclamation_decorator
@hashtag_decorator
tin nhắn def [chào]
in [lời chào]
tin nhắn ["Chào mừng đến với Simplilearn"]
đầu ra
Khoa học dữ liệu MIỄN PHÍ với khóa học Python
Bắt đầu học Khoa học dữ liệu với Python MIỄN PHÍ Bắt đầu họcXác định Trình trang trí mục đích chung trong Python
Nếu bạn để ý, chúng tôi đã sử dụng *args và **kwargs trong ví dụ trước. Các biến này giúp xác định các trình trang trí có mục đích chung trong Python. Chúng sẽ thu thập tất cả các đối số vị trí và từ khóa mà bạn vượt qua và lưu trữ chúng trong các biến args và kwargs tương ứng. Các biến này cho phép bạn đưa ra bao nhiêu đối số tùy ý trong khi gọi hàm, do đó làm cho nó trở nên tổng quát. Đây là một ví dụ về các trình trang trí đa năng trong Python
def chung_mục đích_trang trí [chức năng]
def a_wrapper[*args,**kwargs]
print['Đối số vị trí. ', lập luận]
print['Đối số từ khóa. ', kwargs]
hàm[*args]
trả lại a_wrapper
@General_mục đích_decorator
def no_argument[]
print["Không có đối số. "]
không tranh luận[]
@General_mục đích_decorator
def positional_arguments[a, b, c]
print["Đây là các đối số vị trí"]
vị trí đối số [1,2,3]
@General_mục đích_decorator
đối số từ khóa def[]
print["Đây là các đối số từ khóa"]
đối số từ khóa[city1_name="Mumbai", city2_name="Delhi"]
đầu ra
Trong ví dụ trên, bạn đã định nghĩa một trình trang trí có mục đích chung trong Python. Bạn cũng đã chuyển riêng các đối số vị trí và từ khóa với các chức năng khác nhau
Làm việc với một số công cụ trang trí ưa thích trong Python
Các ví dụ bạn đã thấy cho đến bây giờ là những ví dụ khá cơ bản để giúp bạn làm quen với khái niệm decorator. Nhưng bây giờ, vì bạn đã có hiểu biết cơ bản, hãy xem xét một số chức năng trang trí nâng cao
Thí dụ. Sử dụng Trình trang trí trạng thái trong Python
Trình trang trí trạng thái là chức năng trang trí có thể theo dõi trạng thái, hay nói cách khác, ghi nhớ trạng thái chạy trước đó của chúng. Trong đoạn mã dưới đây, bạn phải tạo một trình trang trí trạng thái để trang trí một từ điển có thể lưu trữ số lần hàm được gọi
nhập hàm
def count_calls[func]
@functools. kết thúc tốt đẹp [func]
def wrapper_count_calls[*args, **kwargs]
trình bao bọc_count_calls. num_calls += 1
in[f"Gọi {wrapper_count_calls. num_calls} của {func. __Tên__. r}"]
hàm trả về[*args, **kwargs]
trình bao bọc_count_calls. num_calls = 0
trả lại trình bao bọc_count_calls
@count_calls
chắc chắn say_whee[]
print["Bánh xe. "]
đầu ra
Thí dụ. Sử dụng các lớp làm công cụ trang trí trong Python
Mặc dù bạn có thể sử dụng các hàm để theo dõi trạng thái, nhưng cách điển hình là sử dụng một lớp. Tương tự như ví dụ trước, bạn sẽ tạo một hàm trang trí để duy trì trạng thái của hàm. Nhưng lần này chức năng trang trí sẽ là một lớp. bạn sẽ phải gọi. __init__ và[]. Các phương thức __call__[] để khởi tạo và gọi thể hiện của lớp tương ứng. Lưu ý rằng. Phương thức __call__[] sẽ được gọi trong ví dụ này thay vì hàm trang trí. Nó sẽ hoạt động như chức năng trình bao bọc mà bạn đã sử dụng cho đến bây giờ
từ funcools nhập update_wrapper
lớp ví dụ
def __init__[tự, func]
update_wrapper[tự, func]
bản thân. chức năng = chức năng
bản thân. ví dụ = {}
bản thân. n_calls = 0
def __call__[self, *args, **kwargs]
bản thân. n_calls += 1
bản thân. ví dụ [bản thân. chức năng. __name__] = bản thân. n_calls
print["Số đếm là. ", bản thân. thí dụ]
tự trở về. func[*args, **kwargs]
@thí dụ
chắc chắn chào [tên]
trả lại f"Xin chào {name}. "
in[hi["Simplilearn"]]
in [xin chào ["George"]]
in [xin chào ["Amit"]]
đầu ra
Như bạn có thể thấy ở đầu ra, bạn đã sử dụng một lớp làm công cụ trang trí để theo dõi trạng thái của hàm hi[]
Thư viện trang trí trong Python là gì?
Thư viện trang trí Python đóng vai trò là kho lưu trữ nhiều mã và ví dụ về trang trí. Bạn có thể tham khảo, sử dụng hoặc tinh chỉnh chúng theo ý muốn của mình. Bạn cũng có thể thêm các công cụ trang trí của mình vào kho lưu trữ này để giúp những người khác tìm hiểu. Đây là một nguồn tài nguyên tuyệt vời để tìm hiểu sâu về các trình trang trí trong Python với nhiều ví dụ. Bạn có thể tham khảo Thư viện Decorator bằng cách nhấn vào đây
Mong muốn chuyển sang lĩnh vực lập trình?
Tóm tắt nó lên
Trong bài viết này, bạn đã học từ A đến Z về decorator trong Python, ngay từ cách tạo chúng cho đến các cách khác nhau để sử dụng chúng. Tuy nhiên đây là chuyên đề nâng cao. Do đó, bạn nên hiểu rõ về những điều cơ bản của Python trước khi tìm hiểu sâu về các công cụ trang trí
Bạn có thể tham khảo Hướng dẫn Python cho người mới bắt đầu của Simplilearn để nắm rõ những điều cơ bản trước. Khi những điều cơ bản của bạn rõ ràng, bạn có thể tiếp tục bằng cách chuyển sang các chủ đề nâng cao. Bạn có thể trở nên xuất sắc trong lập trình Python bằng cách tiếp tục chọn tham gia Khóa học cấp chứng chỉ Python trực tuyến của chúng tôi. Khóa học đi kèm với 38 giờ học kết hợp, 30 giờ học do người hướng dẫn và hơn 20 thực hành được hỗ trợ trên các mô-đun để giúp bạn phát triển Python vượt trội
Có bất kỳ câu hỏi cho chúng tôi? . Các chuyên gia của chúng tôi sẽ liên hệ lại với bạn theo cùng một cách, CÀNG SỚM CÀNG TỐT
Thông tin về các Tác giả
Simplilearn là một trong những nhà cung cấp đào tạo trực tuyến hàng đầu thế giới về Tiếp thị kỹ thuật số, Điện toán đám mây, Quản lý dự án, Khoa học dữ liệu, CNTT, Phát triển phần mềm và nhiều công nghệ mới nổi khác