เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

พิมพ์ประเภทของค่าที่คืนกลับมา

คุณกำลังดีบักแพ็กเกจที่พัฒนาร่วมกับเพื่อน มีบางอย่างผิดปกติกับข้อมูลที่คืนกลับมาจากฟังก์ชันหนึ่ง แต่ยังไม่แน่ใจว่าฟังก์ชันไหนเป็นต้นเหตุ บางครั้งบั๊กแอบซ่อนอยู่ในโค้ดเมื่อฟังก์ชันคืนค่ากลับมาในประเภทที่ไม่ตรงกับที่คาดไว้ เช่น ถ้าคาดว่าฟังก์ชันจะคืน 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}))
แก้ไขและรันโค้ด