Khóa học Phát triển Python Nâng cao
Chương
>
Cấp độ
Các hàm trang trí
Xâu chuỗi các trình trang trí
Mục tiêu
Trang trí mái nhà bằng cờ màu sắc bằng cách xâu chuỗi các decorator.
Mái nhà đã được hít thở không khí trong lành sau khi bị nhốt trong bếp quá lâu, một số đường không có cờ. Sẽ là một ý tưởng hay nếu bạn sắp xếp chúng trong khi bạn đang ở đây, tuy nhiên việc này có thể khó khăn vì bạn cần nhiều loại cờ khác nhau để thiết lập một đường. Bạn có thể làm được điều đó bằng cách xâu chuỗi các decorator.
Các decorator được xâu chuỗi bằng cách lặp lại dấu @, tức là gắn nhiều decorator vào một hàm duy nhất. Ví dụ, điều này cho phép bạn đặt một hàm giữa hai hàm decorator:
# List to add flags to a line
line = []
# Decorator adding a red flag
def red_flag(func):
def add_flag():
line.append("red")
player.speak("Two red flags added to the line")
func()
line.append("red")
return add_flag
# Decorator adding a blue flag
def blue_flag(func):
def add_flag():
line.append("blue")
player.speak("Two blue flags added to the line")
func()
line.append("blue")
return add_flag
# Decorated Function adding line and middle flag
@blue_flag
@red_flag
def middle_green():
line.append("green")
player.speak("A green flag has been added to the line")
Mã code ở trên minh họa một hàm với các decorator được xâu chuỗi đi kèm, các decorator này được tích hợp vào hàm sao cho ở các mép của đường, cờ màu xanh được đặt, lớp bên trong có cờ màu đỏ được đặt và cuối cùng ở giữa có cờ màu xanh lá được đặt. Tất cả chúng được thêm vào danh sách có tên line, đây là phương pháp sẽ được sử dụng để sắp xếp các cờ trên các đường.
Bắt đầu bằng cách đến dấu X vàng và sử dụng hàm read() để kiểm tra hướng dẫn được liệt kê trên biển chỉ dẫn. Tại đây, nó sẽ thông báo cho bạn biết đặt các cờ gì ở đâu với ba (3) loại cờ màu khác nhau: "red", "green" và "blue". Mỗi đường sẽ có đủ cả ba loại cờ, một (1) ở giữa đường, hai (2) ở đường bên trong và hai (2) ở đường bên ngoài, tạo thành tổng cộng năm (5) cờ cho mỗi đường giống như đường được chuẩn bị sẵn ở góc dưới bên trái của bản đồ.
Đi đến dấu X sáng và sử dụng hàm collect() để lấy "flags" trong thùng. Tiếp theo, hãy đi đến các dấu X tối và từ trái sang phải bắt đầu sắp xếp các cờ theo thứ tự mà bạn đã đọc trong hướng dẫn trước đó. Sử dụng các hàm trung gian để đạt được điều này, ví dụ: middle_green() tạo ra một đường cờ như sau: ["blue", "red", "green" ,"red","blue" ]. Sau đó, sử dụng hàm place() để đặt đường sử dụng danh sách line, như sau: place(line).
Giữa mỗi dấu X, hãy xóa danh sách line bằng cách sử dụng hàm clear(), như sau: line.clear(), điều này cho phép bạn tái sử dụng danh sách mà không cần tạo mới cho mỗi đường. Dấu X cuối cùng bên phải yêu cầu một hàm tùy chỉnh:
@
@
def middle_custom():
line.append( Insert append )
player.speak("%s flag has been added to the line"
% ( insert flag ))
Sử dụng hai ký hiệu @ để thêm decorator vào hàm, sau đó hãy điền vào phần thêm dòng và màu của cờ trong chuỗi. Hãy làm điều này theo hướng dẫn trong biển chỉ dẫn để hoàn thành cấp độ.