Python Lambda functions คือฟังก์ชันบรรทัดเดียว ไม่มีชื่อ (anonymous functions) Lambda expressions ใน Python มีประโยชน์สำหรับฟังก์ชันบรรทัดเดียวที่ไม่ต้องการชื่อ เช่น การกรองลิสต์ การแปลงเคสสตริง หรือการคูณตัวเลข
เมื่อคุณเขียนโปรแกรมที่จะทำงานซ้ำๆ หลายครั้ง การทำซ้ำโค้ดของคุณเป็นเรื่องไม่เป็นประโยชน์ เพราะจะหมายความว่าคุณต้องอัปเดตทุกอินสแตนซ์ของมันหากคุณต้องการเปลี่ยนวิธีการทำงานของงานนั้น ยิ่งโค้ดของคุณใหญ่ ยิ่งใช้เวลานานในการทำการเปลี่ยนแปลงเหล่านี้
นั่นคือที่มาของฟังก์ชัน (functions) ใน Python มีประเภทฟังก์ชันพิเศษเรียกว่า anonymous function (ฟังก์ชันไม่มีชื่อ) ซึ่งช่วยให้คุณประกาศฟังก์ชันแบบรวดเร็วได้: lambda expression
คู่มือนี้จะอภิบายวิธีใช้ lambda functions ใน Python เพื่อทำให้กระบวนการซ้ำๆ ทำงานอัตโนมัติ เราจะให้ตัวอย่าง lambda function ในการทำงาน 2 ตัวอย่าง เพื่อให้คุณมีวัสดุทั้งหมดที่ต้องการเพื่อเขียน lambda function ของคุณเอง
Function คืออะไร?
ในการเขียนโปรแกรม ฟังก์ชันคือบล็อกโค้ดที่ดำเนินงานเฉพาะเจาะจง
เหตุผลใหญ่หนึ่งที่โค้ดเดอร์ใช้ฟังก์ชันคือพวกมันช่วยลดการซ้ำซ้อนในโค้ดของพวกเขา หากคุณรวมกระบวนการเข้าไปในฟังก์ชัน คุณสามารถเรียกมันได้ที่ไหนก็ได้ในโปรแกรมของคุณ คุณไม่ต้องทำซ้ำโค้ดของคุณหลายครั้ง
นี่ยังช่วยให้นักพัฒนาเขียนโค้ดที่บำรุงรักษาได้ง่ายขึ้น หากคุณต้องการทำการเปลี่ยนแปลงกระบวนการนั้น ทั้งสิ้นสิ่งที่คุณต้องทำคือแก้ไขฟังก์ชันของคุณ คุณไม่ต้องทำการเปลี่ยนแปลงหลายบรรทัดของโค้ดที่เพิ่งถูกคัดลอกและวางในโปรแกรมของคุณ
นี่คือตัวอย่างของฟังก์ชันใน Python:
def say_hello(name):
print("Hello there, " + name)
say_hello("Arthur")
เมื่อเรารันโค้ดนี้ จะได้ผลดังนี้: Hello there, Arthur.
แม้ฟังก์ชันเหล่านี้จะมีประโยชน์ แต่หากคุณต้องการทำอย่างง่ายๆ เช่น ทำให้ทุกสตริงในลิสต์ของสตริงเป็นตัวพิมพ์เล็ก การเขียนฟังก์ชันค่อนข้าง冗长 (verbose) คุณจะต้องกำหนดชื่อให้ฟังก์ชันใหม่เพื่อให้โค้ดของคุณทำงาน นั่นคือที่มาของ lambda functions
Lambda Function คืออะไร?
Lambda function คือประเภทของฟังก์ชันที่ถูกกำหนดโดยไม่มีชื่อ ฟังก์ชันเหล่านี้บางครั้งเรียกว่า anonymous functions เพราะพวกมันไม่ต้องการชื่อ ในขณะที่ฟังก์ชันจากก่อนหน้านี้มีชื่อ sayHello และถูกกำหนดโดยใช้ "def" lambda function ไม่ต้องการชื่อ และถูกกำหนดโดยใช้ "lambda"
ข้อได้เปรียบหลักของการใช้ lambda function คือ มันสามารถเขียนในบรรทัดเดียวได้ นี่ทำให้ lambda functions มีประโยชน์หากคุณมีกระบวนการรวดเร็วที่คุณต้องการดำเนินการหลายครั้ง นี่คือบางกรณีที่ lambda function อาจช่วยได้:
- การคูณตัวเลข
- การแปลงสตริงเป็นตัวพิมพ์ใหญ่หรือเล็ก
- การกรองลิสต์
นี่คือไวยากรณ์สำหรับการสร้าง lambda function ใน Python:
name = lambda arguments: expression
จำนวนอาร์กิวเมนต์ที่คุณสามารถระบุกับ lambda function ไม่ถูกจำกัด มาทดลองตัวอย่างเพื่อแสดงให้เห็นว่า lambda function ทำงานใน Python อย่างไร สมมติว่าเราต้องการคูณตัวเลขด้วยเจ็ด เพื่อทำเช่นนั้น เราสามารถใช้ฟังก์ชันต่อไปนี้:
def multiply_by_seven(number):
return number * 7
print(multiply_by_seven(2))
เมื่อเรารันโค้ดนี้ จะได้ผลดังนี้: 14.
แม้โค้ดนี้จะทำงาน แต่มันไม่ได้มีประสิทธิภาพเท่าที่ควรจะเป็น เราใช้บรรทัดโค้ดทั้งบรรทัดในการกำหนดชื่อและอาร์กิวเมนต์สำหรับฟังก์ชันของเรา และอีกบรรทัดหนึ่งในการคำนวณและคืนค่า เพื่อทำให้ฟังก์ชันของเรามีประสิทธิภาพมากขึ้น เราสามารถใช้ lambda function ได้
นี่คือ lambda function ที่ดำเนินการเดียวกับข้างต้น:
multiply_by_seven = lambda n: n * 7 print(multiply_by_seven(2))
โค้ดของเราคืนค่า: 14 ตามที่คุณเห็น ผลลัพธ์ของฟังก์ชันของเราเหมือนกัน ความแตกต่างคือเราใช้ lambda function แทนฟังก์ชันทั่วไป ในกรณีนี้:
- คีย์เวิร์ด lambda บ่งชี้ว่าเรากำลังประกาศ lambda function
- n คืออาร์กิวเมนต์สำหรับฟังก์ชันของเรา
- n * 7 คือนิพจน์เดียวที่ระบุให้ lambda function ของเรา
Lambda Functions ใช้เมื่อไหร่?
Lambda functions มีช่วงการใช้งานกว้างใน Python ในตัวอย่างล่าสุด เราสาธิตวิธีใช้ lambda function คูณตัวเลขสองตัว แต่มีกรณีการใช้งานทั่วไปอีก 몇 กรณีที่คุณควรทราบ
บ่อยครั้ง Lambda functions ถูกใช้ร่วมกับฟังก์ชันในตัวอย่าง reduce() function, map() function หรือ filter() function Lambda functions บางครั้งถูกใช้กับ list comprehensions เพื่อดำเนินงานซ้ำๆ ด้วย
สมมติว่าเราเป็นเจ้าของร้านเบเกอรี่ และเราต้องการสร้างลิสต์ของพายทั้งหมดที่เราขาย โดยอิงจากลิสต์ของขนมปังอบทั้งหมดที่เราขาย เราสามารถทำได้ด้วยโค้ดนี้:
baked_goods = ['Blondie', 'Chocolate Chip Cookie', 'Apple Pie', 'Pecan Pie', 'Blackberry Pie', 'Scone'] pies = filter(lambda pie: "Pie" in pie, baked_goods) print(list(pies))
โค้ดของเราคืนค่า:
['Apple Pie', 'Pecan Pie', 'Blackberry Pie']
มาแยกวิเคราะห์ว่ามันทำงานอย่างไร ในบรรทัดแรกของโค้ด เราประกาศลิสต์ของขนมปังอบ จากนั้นเราใช้ฟังก์ชัน filter() เพื่อกรองขนมปังอบทั้งหมดที่มีคำว่า "Pie" ฟังก์ชัน filter() ช่วยให้เราวนผ่านทุกรายการในลิสต์ "baked_goods" และกรองรายการที่ไม่ตรงตามเกณฑ์เฉพาะ
เราทำได้โดยการกำหนด lambda function ที่ตรวจสอบว่าแต่ละสตริงมี "Pie" หรือไม่ และคืนค่าสตริงนั้นก็ต่อเมื่อสตริงนั้นมี "Pie" ในกรณีนี้ lambda function ของเราคือ:
lambda pie: "Pie" in pie
คุณเห็นได้จากตัวอย่างนี้ว่า Python lambda functions ไม่ต้องการชื่อ พวกมันสามารถมีอยู่แบบ inline ได้ ไม่เหมือนฟังก์ชันทั่วไป หากรายการตรงตามเกณฑ์ของเรา Lambda expression ของเราจะคืนค่า true มิฉะนั้น จะไม่มีค่าคืน
สุดท้าย เราแปลงตัวแปร "pies" เป็นลิสต์และพิมพ์ทางคอนโซล เราทำเช่นนี้เพราะ filter() คืนค่าออบเจ็กต์ filter แบบกำหนดเอง ดังนั้นเพื่อให้เห็นพายของเรา เราต้องแปลงมันโดยใช้ list()
สรุป
Lambda functions หรือที่รู้จักในชื่อ anonymous functions ช่วยให้คุณกำหนดฟังก์ชันโดยไม่ต้องมีชื่อ พวกมันมีประโยชน์หากคุณต้องการดำเนินการซ้ำๆ ในโค้ดของคุณ
ตัวอย่างเช่น หากคุณต้องการคูณตัวเลขด้วยอีกตัวเลขหนึ่ง คุณอาจใช้ lambda function หรือคุณอาจใช้ lambda function เพื่อกรองรายการในลิสต์