ติด tag ให้ฟังก์ชันของคุณ
การติด tag หมายถึงการกำหนดสตริงหนึ่งตัวหรือมากกว่านั้นให้กับสิ่งใดสิ่งหนึ่งเพื่อใช้เป็นป้ายกำกับ ตัวอย่างเช่น เรามักติด tag ให้กับอีเมลหรือรูปภาพเพื่อให้ค้นหาได้ในภายหลัง คราวนี้ลองเขียน decorator ที่ช่วยให้ติด tag ให้ฟังก์ชันด้วยรายการ tag แบบใดก็ได้ตามต้องการ ซึ่งสามารถนำไปใช้ประโยชน์ได้หลายอย่าง เช่น
- บันทึกข้อมูลว่าใครเป็นผู้พัฒนาฟังก์ชันนั้น เพื่อให้ผู้ใช้รู้ว่าควรถามใครเมื่อพบปัญหา
- ติดป้ายฟังก์ชันว่า "experimental" เพื่อแจ้งให้ผู้ใช้ทราบว่า input และ output อาจเปลี่ยนแปลงได้ในอนาคต
- ทำเครื่องหมายฟังก์ชันที่วางแผนจะลบออกในเวอร์ชันถัดไปของโค้ด
- และอื่น ๆ
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การเขียนฟังก์ชันใน Python
คำแนะนำการฝึกหัด
- กำหนด decorator ใหม่ชื่อ
decorator()เพื่อ return ออกไป - ตรวจสอบให้แน่ใจว่าฟังก์ชันที่ถูก decorate ยังคง metadata ของตัวเองไว้
- เรียกฟังก์ชันที่กำลัง decorate อยู่ แล้ว return ผลลัพธ์
- Return decorator ใหม่ที่สร้างขึ้น
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
def tag(*tags):
# Define a new decorator, named "decorator", to return
def ____(____):
# Ensure the decorated function keeps its metadata
@____(____)
def wrapper(*args, **kwargs):
# Call the function being decorated and return the result
return ____(____, ____)
wrapper.tags = tags
return wrapper
# Return the new decorator
return ____
@tag('test', 'this is a tag')
def foo():
pass
print(foo.tags)