พิมพ์ประเภทของค่าที่คืนกลับมา
คุณกำลังดีบักแพ็กเกจที่พัฒนาร่วมกับเพื่อน มีบางอย่างผิดปกติกับข้อมูลที่คืนกลับมาจากฟังก์ชันหนึ่ง แต่ยังไม่แน่ใจว่าฟังก์ชันไหนเป็นต้นเหตุ บางครั้งบั๊กแอบซ่อนอยู่ในโค้ดเมื่อฟังก์ชันคืนค่ากลับมาในประเภทที่ไม่ตรงกับที่คาดไว้ เช่น ถ้าคาดว่าฟังก์ชันจะคืน numpy array แต่กลับได้ list มาแทน ก็อาจทำให้เกิดพฤติกรรมที่ไม่คาดคิดได้ เพื่อตรวจสอบว่านี่คือสาเหตุของปัญหาหรือไม่ คุณจึงตัดสินใจเขียน decorator ชื่อ print_return_type() ขึ้นมา ซึ่งจะพิมพ์ประเภทของตัวแปรที่คืนกลับมาจากทุกการเรียกฟังก์ชันที่ถูก decorate
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การเขียนฟังก์ชันใน Python
คำแนะนำการฝึกหัด
- สร้างฟังก์ชันซ้อนใน (nested function) ชื่อ
wrapper()ซึ่งจะกลายเป็นฟังก์ชันที่ถูก decorate แล้ว - เรียกฟังก์ชันที่กำลัง decorate อยู่
- คืนค่าฟังก์ชันที่ถูก decorate แล้วกลับออกไป
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
def print_return_type(func):
# Define wrapper(), the decorated function
____ ____(____, ____):
# Call the function being decorated
result = ____(____, ____)
print('{}() returned type {}'.format(
func.__name__, type(result)
))
return result
# Return the decorated function
return ____
@print_return_type
def foo(value):
return value
print(foo(42))
print(foo([1, 2, 3]))
print(foo({'a': 42}))