Câu nào sau đây là đúng Bạn không thể xâu chuỗi nhiều bộ trang trí trong Python?

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ọc

Cú 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ọc

Xá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ả

đơn giản

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

Chúng ta có thể xâu chuỗi nhiều trình trang trí trong Python không?

Chuỗi trang trí có nghĩa là áp dụng nhiều hơn một trang trí bên trong một chức nă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.

Điều gì không đúng về trình trang trí trong Python?

Không thể trang trí hàm có tham số . Giải trình. Bất kỳ chức năng nào, bất kể nó có tham số hay không, đều có thể được trang trí. Do đó tuyên bố là sai.

Điều gì là đúng về trang trí trong Python?

Trình trang trí trong Python là hàm nhận một hàm khác làm đối số và trả về một hàm khác . Trình trang trí có thể cực kỳ hữu ích vì chúng cho phép mở rộng chức năng hiện có mà không có bất kỳ sửa đổi nào đối với mã nguồn của chức năng ban đầu.

Một chức năng có thể có nhiều trang trí không?

Nhiều trang trí . It is also possible to decorate a function with multiple decorators.

Chủ Đề