Python: Lambda function

Monpriya Tammavong
2 min readMay 17, 2022

--

เรื่องมันมีอยู่ว่าาาา เขียนเท่าไหร่ก็ไม่คล่องสักที แง้ แบบนานๆ ใช้ที แล้วก็รู้สึกไม่คล่องเลย ก็เลยลองมาย่อยในแบบที่ตัวเองจะจำได้สักหน่อย

syntax มันก็จะประมาณนี้

lambda arguments: expression

ในความเข้าใจของเราจะเป็นแบบการเอาไว้เขียน function ง่ายๆ สั้นๆ ใส่ไว้ในตัวแปร แล้วเราก็เอามาใช้ได้ในสถานการณ์ต่างๆ ลองเริ่มจากตัวอย่างง่ายๆ ก่อน

>>> add = lambda x, y: x + y
>>> add(1, 4)
5

ตัวอย่างข้างบนก็จะเป็น add รับ arguments 2 ตัวคือ x กับ y แล้ว return ผลบวกออกไป ตอนเรียก add ก็เรียกเหมือน function ธรรมดาเลย หรือจริงๆ จะทำ lambda แล้วก็ใช้เลยก็ได้

>>> (lambda a, b: a * b)(6, 2)
12

use case ที่เราเคยใช้ก็อันนี้เลย แบบ stackoverflow ทุกครั้ง เพราะจำไม่ได้สักที เป็นสิ่งแรกที่ทำให้ได้ใช้ lambda ก็คือ sort dict by value เพราะปกติ ถ้าเรา sort dict น้องจะเอา key ไป sort ให้เรา

>>> data = {"A": 5, "B": 1, "C": 2, "D": 6}
>>> sorted_data = {k: v for k, v in sorted(data.items(), key=lambda item: item[1])}
>>> sorted_data
{"B": 1, "C": 2, "A": 5, "D": 6}

ถ้าดูจากตรงส่วนที่เราเอา lambda ไปใช้จะมี 2 ส่วนที่ต้องเข้าใจก็คือ sorted กับ key

sorted เป็น function ที่ใส่พวก iterable เข้าไป (list, tuple, string, dict) แล้วก็จะคืนของที่ sort แล้วออกมาให้ syntax น้องจะประมาณนี้

sorted(iterable, key=None, reverse=False)

ข้างบนจะเป็น default ของ sorted parameter key จะเป็นคนบอกว่า เราจะใช้อะไรใน iterable ที่ให้มาในการเอามาเปรียบเทียบในการ sort ซึ่งตัวอย่างที่ sort dict by value ของเราคือใช้ item[1] เพราะของที่อยู่ใน data.items() จะเป็นหน้าตาประมาณนี้

>>> data.items()
dict_items([("A", 5), ("B", 1), ("C", 2), ("D", 6)])

แล้วเราก็บอกว่า น้องที่อยู่ช่องที่ 1 ของแต่ละ element ในนี้มาเป็น key ในการ sort ให้หน่อยค่า คุณ sorted ก็จะเอามาทำให้เรา เย้

แต่จริงๆ แล้วประโยชน์ของน้อง lambda ไม่ได้มีแค่นี้ จะใช้ lambda กับ higher-order functions ก็ได้ (higher-order function คือ function ที่รับ function(s) เป็น arguments หรือ function ที่ return function) เช่นนน

>>> wave_text = lambda text, func: text + func(text) + text
>>> wave_text("eve", lambda t: t.upper())
"eveEVEeve"

อันนี้เป็นแค่ตัวอย่าง function นี้อาจจะดูแบบไร้สาระ 55555 แต่เราเอาไปใช้กับพวก handler ก็ได้หรืออะไรก็ตามที่เราต้องการ จริงๆ sorted ข้างบนก็เป็น higher-order function นะเพราะเราใส่ lambda เข้าไปตรง key

เย้ ก็ประมาณนี้ก่อน จริงๆ lambda ก็เป็นแค่วิธีเขียนอีกแบบนึง เราจะใช้การประกาศ function ธรรมดาเหมือนเดิมก็ได้ ขึ้นอยู่กับว่าเราสะดวกแบบไหน เขียนแบบนี้แล้วเพื่อนร่วมทีม หรือตัวเองในอนาคตทำงานสะดวกป่าว อ่านเข้าใจป่าว อะไรทำนองนั้น

ขอบคุณทุกคนที่เข้ามาอ่านนะค้า อันนี้เหมือนจดไว้กันลืมเฉยๆ ช่วงนี้รู้สึกความจำสั้น ถ้าใครอยากรู้วิธีใช้เยอะกว่านี้ เราว่ายังมี blog อีกเยอะแยะที่เขียนไว้ค่อนข้างดี แล้วก็น่าสนใจ แปะไว้ใน ref แล้วงับ เจอกันน เย้

--

--

Monpriya Tammavong

Developer Consultant at ThoughtWorks CPE29 E71 KU75 YWC16 ..want to be a programmer..