November 15, 2011

Python: แลมดาฟังก์ชันและส่วนปิดกั้น

แลมดาฟังก์ชัน (lambda function) เป็นมรดกตกทอดจากฝั่ง functional มันคือ syntax สำหรับประกาศฟังก์ชันในอีกรูปแบบหนึ่ง เช่น

และเรายังสามารถใช้มันได้โดยไม่ต้องประกาศชื่อ ใช้เสร็จครั้งเดียวก็จบ ไม่ต้องประกาศเป็นฟังก์ชันให้วุ่นวาย
ข้อดีคือ ใน code ที่มีขนาดใหญ่มากๆ จะช่วยลดความสับสนของเราไปได้ครับ
สำหรับส่วนปิดกั้น (closure) คือเหตุการณ์ที่เกิดขึ้นตอนประกาศฟังก์ชันที่เมื่อมีการขอใช้ตัวแปรจาก nonlocal มันจะ freeze ค่านั้นไว้ เพื่อให้การเรียกใช้ฟังก์ชันนี้ในอนาคตไม่มีผลข้างเคียง ไม่ว่าค่าของตัวแปรที่ไปอ้างอิงมานั้นจะเปลี่ยนแปลงไป
แม้ว่า Python จะไม่มี syntax เฉพาะสำหรับประกาศ closure เช่นภาษาอื่น แต่ด้วยการส่งผ่านตัวแปร by value และหน้าตาของ scope ตัวแปร ทำให้การสร้าง closure สามารถทำได้ดังนี้ครับ

1 comment: