Coding for KidsCoding for Kids
ระดับสร้างสรรค์ความท้าทายคู่มือครู
โหวตสำหรับฟีเจอร์
หลักสูตรการพัฒนาด้วย Python ขั้นสูง
บทที่
>
ระดับ

ตัวตกแต่ง
การเชื่อมต่อ Decorators

วัตถุประสงค์

ตกแต่งหลังคาด้วยธงที่มีสีโดยเชนตัวตกแต่ง

หลังคาได้สัมผัสกับลมบริสุทธิ์หลังจากที่ถูกกักอยู่ในครัวมานาน บางบรรทัดยังไม่มีธง การตั้งธงในตอนนี้อาจเป็นความคิดที่ดี แต่มันอาจจะซับซ้อนเนื่องจากคุณต้องใช้ธงหลากหลายแบบสำหรับแต่ละบรรทัด คุณสามารถทำสิ่งนี้ได้โดยการเชนตัวตกแต่ง

ตัวตกแต่งสามารถเชนกันได้โดยการเพิ่มสัญลักษณ์ @ ซ้ำ ซึ่งหมายถึงการแนบตัวตกแต่งหลายตัวเข้ากับฟังก์ชันเดียวกัน ตัวอย่างเช่น วิธีนี้ช่วยให้คุณสามารถแทรกฟังก์ชันหนึ่งไว้ระหว่างฟังก์ชันตัวตกแต่งสองตัวได้:

# 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")

โค้ดด้านบนแสดงให้เห็นถึงฟังก์ชันที่มีตัวตกแต่งที่ถูกเชนเข้าด้วยกัน ซึ่งตัวตกแต่งเหล่านี้จะถูกแทรกลงในฟังก์ชันเพื่อให้ธงสีฟ้าวางอยู่ที่ขอบของบรรทัด ชั้นในมีการวางธงสีแดง และในที่สุดตรงกลางมีการวางธงสีเขียว ทั้งหมดถูกเพิ่มเข้าไปในลิสต์ชื่อ line ซึ่งเป็นวิธีที่จะใช้สำหรับตั้งค่าธงบนบรรทัด

เริ่มต้นโดยการเดินไปยังเครื่องหมาย X สีทองและใช้ฟังก์ชัน read() เพื่อตรวจสอบคำแนะนำที่ระบุไว้บนป้าย ที่นี่จะแจ้งให้คุณทราบว่าจะวางธงใดไว้ที่ไหน โดยมีธงที่มีสีแตกต่างกันสามชนิด: "red" , "green" และ "blue" แต่ละบรรทัดจะมีธงทั้งสามชนิด หนึ่งอันอยู่ตรงกลาง บรรทัดชั้นในมีสองอัน และบรรทัดชั้นนอกมีสองอัน รวมเป็นทั้งหมดห้าอันต่อบรรทัด เหมือนกับบรรทัดที่สร้างไว้ล่วงหน้าในมุมซ้ายล่างของแผนที่

เดินไปยังเครื่องหมาย X สีอ่อนและใช้ฟังก์ชัน collect() เพื่อเก็บ "flags" จากกล่อง จากนั้นเดินไปยังเครื่องหมาย X สีเข้มและจากซ้ายไปขวาเริ่มวางธงตามลำดับที่ระบุไว้ในคำแนะนำที่คุณได้อ่านไว้ก่อนหน้านี้ ใช้ฟังก์ชันสำหรับกลางเพื่อให้ได้ผลลัพธ์นี้ ตัวอย่างเช่น: middle_green() จะสร้างบรรทัดธงแบบนี้: ["blue", "red", "green" ,"red","blue" ] แล้วใช้ฟังก์ชัน place() เพื่อตั้งค่าบรรทัดโดยใช้ลิสต์ line ดังนี้: place(line)

ระหว่างแต่ละเครื่องหมาย X ให้ล้างลิสต์ line โดยใช้ฟังก์ชัน clear() เช่นนี้: line.clear() ซึ่งช่วยให้คุณสามารถใช้ลิสต์เดิมซ้ำได้โดยไม่จำเป็นต้องสร้างใหม่สำหรับแต่ละบรรทัด เครื่องหมาย X สุดท้ายทางขวาต้องใช้ฟังก์ชันที่กำหนดเอง:

@ @ def middle_custom(): line.append( Insert append ) player.speak("%s flag has been added to the line" % ( insert flag ))

ใช้สัญลักษณ์ @ สองตัวที่ตั้งไว้เพื่อเพิ่มตัวตกแต่งให้กับฟังก์ชัน จากนั้นเติมข้อมูลในส่วนของการเพิ่มธงลงในลิสต์และระบุสีของธงในสตริง ทำเช่นนี้ตามคำแนะนำในป้ายเพื่อทำให้ระดับนี้สมบูรณ์

หนังสือโค้ด