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()