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

Closure ช่วยปกป้องค่าของคุณ

คุณกำลังช่วยหลานสาวทำความเข้าใจเรื่อง closure ต่อไป คุณได้เขียนฟังก์ชัน get_new_func() ที่คืนค่าเป็นฟังก์ชันซ้อนอยู่ภายใน ฟังก์ชันซ้อนนั้นชื่อ call_func() จะเรียกใช้ฟังก์ชันใดก็ตามที่ส่งเข้ามาใน get_new_func() นอกจากนี้คุณยังได้เขียน my_special_function() ซึ่งพิมพ์ข้อความแจ้งว่ากำลังรัน my_special_function() อยู่

คุณต้องการแสดงให้หลานสาวเห็นว่าไม่ว่าจะทำอะไรกับ my_special_function() หลังจากส่งเข้า get_new_func() แล้ว ฟังก์ชันใหม่ก็ยังคงทำงานเหมือน my_special_function() ดั้งเดิมเสมอ เพราะฟังก์ชันนั้นถูกเก็บไว้ใน closure ของฟังก์ชันใหม่

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

การเขียนฟังก์ชันใน Python

ดูคอร์ส

แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ

ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์

def my_special_function():
  print('You are running my_special_function()')
  
def get_new_func(func):
  def call_func():
    func()
  return call_func

new_func = get_new_func(my_special_function)

# Redefine my_special_function() to just print "hello"
def my_special_function():
  ____

new_func()
แก้ไขและรันโค้ด