Lambda function ในภาษา Python
ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับ Lambda function ในภาษา Python เราจะมาดูกันว่ามันคืออะไรและสามารถนำไปใช้ได้อย่างไรในการเขียนโปรแกรม พร้อมกับตัวอย่างการใช้งาน Lambda function ในการเขียนโปรแกรม นี่เป็นเนื้อหาในบทนี้
- Lambda function คืออะไร
- การประกาศ Lambda function
- ตัวอย่างการใช้งาน Lambda function
- การใช้งานกับฟังก์ชัน filter
- การใช้งานกับฟังก์ชัน map
Lambda function คืออะไร
Lambda function หรือ Anonymous function เป็นฟังก์ชัน Expression ที่แสดงถึงค่าของฟังก์ชัน (Function literal) ซึ่งสามารถสร้างและเก็บค่าไว้ในตัวแปร หรือส่งเป็นพารามิเตอร์ของฟังก์ชันอื่นได้ นั่นหมายความว่ามันไม่จำเป็นต้องมีชื่อในการประกาศ แต่เราสามารถใช้มันได้เหมือนกับค่าๆ หนึ่งในภาษา Python
Lambda function เป็นอีกรูปแบบหนึ่ีงของการประกาศฟังก์ชัน โดยวัตถุประสงค์ก็เพื่อเอาไว้ประกาศฟังก์ชันเพื่อส่งเป็น Callback ของฟังก์ชันอื่นๆ หรือเก็บเป็นค่าไว้ในตัวแปร ดังนั้นรูปแบบการประกาศของมันจึงสั้นและเรียบง่ายกว่า และที่สำคัญมันสามารถมีได้เพียงหนึ่งคำสั่ง (Expression) เท่านั้นซึ่งจะเป็นค่าส่งกลับของฟังก์ชันเสมอ
นี่เป็นตัวอย่างของการประกาศ Lambda function ในภาษา Python ซึ่งเป็นฟังก์ชันสำหรับตรวจสอบว่าตัวเลขเป็นจำนวนคู่หรือไม่
is_even = lambda n : n % 2 == 0
ฟังก์ชันนี้รับหนึ่งพารามิเตอร์เป็นตัวเลขที่ต้องการตรวจสอบ จากนั้นส่งค่ากลับโดย Expression ของมันเป็น Boolean เพื่อบ่งบอกว่าตัวเลขเป็นจำนวนคู่หรือไม่ ซึ่งนี่จะมีการทำงานเหมือนกับฟังก์ชันปกติที่ถูกประกาศด้วย
def is_even(n):
return n % 2 == 0
ฟังก์ชันทั้งสองรูปแบบให้ผลลัพธ์การทำงานที่เหมือนกัน แต่ Lambda function ถูกออกแบบมาสำหรับการประกาศฟังก์ชันแบบสั้นและกระทัดรัด และสามารถนำไปใช้งานได้ทันที คุณไม่จำเป็นต้องกำหนดมันใส่ในตัวแปรเหมือนกับที่เราทำ
การประกาศ Lambda function
นี่เป็นรูปแบบของการประกาศ Lambda function ในภาษา Python
lambda param1, param2, ...: expr
ในรูปแบบการประกาศ เราใช้คำสั่ง lambda
สำหรับประกาศ Lambda function ตามด้วยพารามิเตอร์ที่คั่นแต่ละพารามิเตอร์ด้วยเครื่องหมายคอมมา (,
) ถ้าหากฟังก์ชันไม่มีพารามิเตอร์ เราสามารถละเว้นมันออกไปดังนี้
lambda: expr
หลังจากเครื่องหมายโคลอน (:
) เป็นการกำหนดการทำงานของ Lambda function โดย expr
นั้นสามารถเป็นนิพจน์ (Expression) ใดๆ ในภาษา Python นี่เป็นเพียงคำสั่งเดียวที่ฟังก์ชันสามารถมีได้ และมันถูกใช้เป็นค่าส่งกลับของฟังก์ชันเสมอ
Lambda function เป็นฟังก์ชันที่ไม่มีชื่อ โดยที่ lambda
ที่เห็นในตัวอย่างนั้นเป็นเพียงคำสั่งสำหรับประกาศฟังก์ชันเท่านั้น คุณสามารถสร้างฟังก์ชันและกำหนดใส่ไว้ในตัวแปรได้ และเราจะสามารถเรียกใช้มันได้เหมือนกับฟังก์ชันปกติ ยกตัวอย่างเช่น
fn = lambda param1, param2, ...: expr
คุณสามารถจินตนาการได้ว่า Lambda function เป็นเหมือนค่าค่าหนึ่งในภาษา Python ในกรณีนี้คือค่าของฟังก์ชัน (Function expression หรือ Function literal) หลังจากที่เรากำหนดมันไว้ในตัวแปร fn
เราสามารถเรียกใช้งานมันได้ด้วยคำสั่ง fn()
ซึ่งจะเหมือนกับการเรียกใช้ฟังก์ชันในรูปแบบปกติ
ตัวอย่างการใช้งาน Lambda function
ต่อไปมาดูตัวอย่างของการประกาศและใช้งาน Lambda function ในภาษา Python ในตัวอย่างนี้ เราจะสร้าง Lambda function สำหรับหาผลรวมของตัวเลขสองตัวที่ส่งเป็นพารามิเตอร์ของฟังก์ชัน และเร่ียกใช้งานฟังก์ชันดังกล่าว
add = lambda a, b: a + b
print(add(2, 3))
print(add(4, 6))
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
5
10
ในตัวอย่าง เราได้ประกาศ Lambda function ที่รับพารามิเตอร์สองตัวคือ a
และ b
และส่งค่ากลับเป็นผลรวมของพารามิเตอร์ทั้งสอง เราได้กำหนดฟังก์ชันไว้ในตัวแปร add
เพื่อเรียกใช้งานมันในภายหลัง จากนั้นเรียกใช้งานฟังก์ชันและแสดงผลลัพธ์การทำงานออกทางหน้าจอ
และอย่างที่คุณเห็น รูปแบบของการประกาศฟังก์ชันนั้นสั้นและเรียบง่าย เมื่อเทียบกับการใช้ฟังก์ชันในรูปแบบปกติ ซึ่งสามารถเขียนได้เป็น
def add(a, b):
return a + b
มันไม่มีความแตกต่างของการทำงานระหว่างการประกาศแบบ Lambda function หรือฟังก์ชันปกติ แต่อย่างที่เราบอกไป Lambda function สามารถประกอบไปด้วยเพียงคำสั่งเดียวเท่านั้น ดังนั้นมันจึงเหมาะสำหรับประกาศฟังก์ชันที่ง่ายและไม่ซับซ้อน และสามารถนำไปใช้ได้ทันที
มาดูตัวอย่างต่อไปสำหรับการประกาศและใช้งาน Lambda function ในภาษา Python ในตัวอย่างนี้ มาสร้าง Lambda function สำหรับแสดงข้อความออกทางหน้าจอ
hi = lambda: print("Hi everyone")
hello = lambda name: print("Hello %s" % name)
hi()
hello("Metin")
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
Hi everyone
Hello Metin
ในตัวอย่าง เราได้สร้างสอง Lambda function สำหรับกล่าวคำทักทาย โดยการกำหนดค่าของฟังก์ชันไว้ในตัวแปร hi
และ hello
ตามลำดับ โดยฟังก์ชัน hi
ใช้สำหรับแสดงคำกล่าวทักทายทุกคน และมันไม่ต้องมีพารามิเตอร์ในการทำงาน ส่วนฟังก์ชัน hello
รับหนึ่งพารามิเตอร์ซึ่งเป็นชื่อของคนที่ต้องการกล่าวคำทักทาย
นิพจน์การทำงานของฟังก์ชันคือการเรียกใช้ฟังก์ชัน print
สำหรับแสดงข้อความออกทางหน้าจอ นั่นหมายความว่าผลลัพธ์การทำงานของฟังก์ชัน print
จะกลายมาเป็นค่าที่ส่งกลับจาก Lambda function ซึ่งคือ None
print(hi()) # None
print(hello("Metin")) # None
หรือกล่าวอีกในหนึ่ง ผลลัพธ์ของคำสั่งที่ทำงานในฟังก์ชันจะกลายมาเป็นค่าส่งกลับของฟังก์ชันเสมอ
นอกจากนี้ Lambda function ยังถูกออกแบบมาสำหรับส่งค่าเป็นฟังก์ชัน Callback ให้กับเหล่าฟังก์ชันที่รับฟังก์ชันเพื่อทำงาน ยกตัวอย่างเช่น ฟังก์ชัน filter
และ map
ในภาษา Python เราจะมาดูการใช้งานร่วมกับสองฟังก์ชันที่ว่านี้
การใช้งานกับฟังก์ชัน filter
ฟังก์ชัน filter
ใช้สำหรับกรองข้อมูลจาก Sequence จากฟังก์ชันกรองที่กำหนดเป็นฟังก์ชัน Callback ในตัวอย่างนี้่เป็นการใช้ฟังก์ชัน filter
สำหรับกรองเอาเพียงเลขคู่ภายในลิสต์ โดยการใช้มันร่วมกับ Lambda function
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = filter(lambda n: n % 2 == 0, numbers)
print(list(even_numbers))
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
[2, 4, 6, 8, 10]
ในตัวอย่างเรา ได้ประกาศลิสต์ numbers
ที่เก็บตัวเลขจำนวนเต็มสิบตัว และเราได้ใช้ฟังก์ชัน filter
สำหรับกรองเอาตัวเลขคู่ภายในลิสต์ เราส่ง Lambda function เป็นฟังก์ชัน Callback สำหรับฟังก์ชัน filter
เพื่อทำงาน
lambda n: n % 2 == 0
นั่นหมายความว่าแต่ละค่าภายในลิสต์จะถูกส่งเข้ามายัง Lambda function ที่เรากำหนดให้กับฟังก์ชัน filter
ผ่านพารามิเตอร์ n
ของ Lambda function ถ้าหากค่าๆ ภายในลิสต์ส่งผลให้ผลลัพธ์การทำงานของ Lambda function เป็นจริง ค่าดังกล่าวจะถูกเลือก
print(list(even_numbers))
ฟังก์ชัน filter
ส่งค่ากลับเป็นออบเจ็คของค่าใหม่ทั้งหมดที่ถูกเลือก ดังนั้นเราแปลงมันกลับมายังลิสต์และแสดงผลออกทางหน้าจอ
คุณสามารถเขียนโปรแกรมเพื่อให้ได้ผลลัพธ์เดียวกันนี้โดยการใช้ฟังก์ชันในรูปแบบปกติดังนี้
def is_even(n):
return n % 2 == 0
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = filter(is_even, numbers)
print(list(even_numbers))
จะเห็นว่าเราต้องประกาศฟังก์ชัน is_even
ก่อนจากนั้นนำชื่อของมันมาใช้งาน ดังนั้นการใช้ Lambda function เราสามารถส่งเข้าไปยังฟังก์ชัน filter
ได้ทันที โดยที่ไม่ต้องประกาศฟังก์ชันและเก็บไว้ในตัวแปรก่อน แม้ว่าจะทำแบบนั้นได้ก็ตาม
การใช้งานกับฟังก์ชัน map
ฟังก์ชัน map
ใช้สำหรับแปลงข้อมูลจาก Sequence เป็นค่าใหม่ที่ได้จากผลลัพธ์ของฟังก์ชัน Callback ที่กำหนดให้กับฟังก์ชัน ในตัวอย่างนี้เราจะเขียนโปรแกรมสำหรับแปลงตัวเลขภายในลิสต์ให้เป็นสองเท่า
numbers = [1, 2, 3, 4, 5, 7, 8]
doubled = map(lambda n: n * 2, numbers)
print(list(doubled))
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
[2, 4, 6, 8, 10, 14, 16]
ฟังก์ชัน map
จะวนรอบค่าภายในลิสต์ numbers
และส่งแต่ละค่าเข้าไปยัง Lambda function ที่เราส่งเป็นพารามิเตอร์ของฟังก์ชัน ผลลัพธ์ที่ส่งกลับมาจากฟังก์ชันจะกลายมาเป็นค่าใหม่ของลิสต์
lambda n: n * 2
นั่นหมายความว่าในตอนท้ายเราจะได้ลิสต์ใหม่ที่มีตัวเลขเพิ่มขึ้นเป็นสองเท่า จากผลการทำงานของนิพจน์ n * 2
ซึ่งเป็นค่าส่งกลับของ Lambda function
และอย่างที่คุณเห็น การใช้ Lambda function เป็นวิธีที่ง่ายและรวดเร็วสำหรับการสร้างฟังก์ชันเพื่อส่งเป็น Callback function ของฟังก์ชันอื่น ในกรณีนี้คือ map
และ filter
อย่างไรก็ตาม ในภาษา Python ยังมีฟังก์ชันอื่นๆ ที่รับฟังก์ชันเป็นพารามิเตอร์เพื่อทำงาน
ในบทนี้ คุณได้เรียนรู้และทำความรู้จักกับ Lambda function ในภาษา Python การประกาศและการใช้งาน Lambda function พร้อมกับการใช้งานร่วมกับฟังก์ชันอื่นๆ อย่างเช่น map
และ filter
เป็นต้น และเราหวังว่าคุณสามารถนำมันไปประยุกต์ใช้เพื่อทำให้การเขียนโปรแกรมของคุณง่ายขึ้น