Python ฟังก์ชันแลมบ์ดาพร้อมตัวอย่าง

⚡ สรุปอย่างชาญฉลาด

ฟังก์ชันแลมบ์ดาใน Python ฟังก์ชันแลมบ์ดา (lambda) เป็นฟังก์ชันขนาดเล็กที่ไม่ระบุชื่อ ซึ่งกำหนดโดยใช้คีย์เวิร์ด lambda แทน def ฟังก์ชันเหล่านี้เก็บนิพจน์เดียว รับอาร์กิวเมนต์ได้หลายตัว และมักถูกส่งต่อไปยังฟังก์ชันในตัว เช่น map(), filter() และ sorted() โดยตรง

  • 🔑 คีย์เวิร์ด Lambda: ฟังก์ชันแลมบ์ดาเขียนโดยใช้พารามิเตอร์ของฟังก์ชันแลมบ์ดา: นิพจน์ โดยไม่มีการกำหนดนิยาม ไม่มีชื่อ และไม่มีคำสั่งส่งคืนค่าที่ระบุอย่างชัดเจน
  • 🧮 นิพจน์เดี่ยว: เนื้อหาของนิพจน์จะมีเพียงหนึ่งนิพจน์เท่านั้น ซึ่งค่าของมันจะถูกส่งกลับโดยอัตโนมัติ ดังนั้นจึงไม่อนุญาตให้ใช้คำสั่งหรือบรรทัดหลายบรรทัด
  • 🔗 การจับคู่ในตัว: โดยทั่วไปแล้ว ฟังก์ชันแลมบ์ดาจะถูกส่งผ่านไปยังฟังก์ชัน map(), filter(), reduce() และ sorted() เพื่อแปลงหรือเลือกรายการในลำดับ
  • IIFE: สามารถกำหนดและเรียกใช้แลมบ์ดาได้ทันทีโดยใช้รูปแบบ (lambda x: x + x)(2) โดยจะส่งคืนผลลัพธ์ในทันที
  • 🇧🇷 เทียบกับคำจำกัดความ: ฟังก์ชันทั่วไปจำเป็นต้องมีชื่อและสามารถบรรจุคำสั่งได้หลายคำสั่ง ในขณะที่ฟังก์ชันแลมบ์ดาจะแลกความสามารถนั้นกับไวยากรณ์ที่กระชับและเขียนได้ในบรรทัดเดียว
  • 🤖 ความช่วยเหลือจากเอไอ: ผู้ช่วย AI เช่น GitHub Copilot สร้างนิพจน์แลมบ์ดาสำหรับคีย์ map, filter และ sort จากข้อความแจ้งสั้นๆ

Python ฟังก์ชั่นแลมบ์ดา

ฟังก์ชั่นแลมบ์ดาคืออะไร Python?

A ฟังก์ชันแลมบ์ดาใน Python การเขียนโปรแกรมเป็นฟังก์ชันที่ไม่ระบุชื่อหรือฟังก์ชันที่ไม่มีชื่อ เป็นฟังก์ชันขนาดเล็กและจำกัดไม่ให้มีมากกว่าหนึ่งบรรทัด เช่นเดียวกับฟังก์ชันปกติ ฟังก์ชัน Lambda สามารถมีอาร์กิวเมนต์ได้หลายรายการด้วยนิพจน์เดียว

In Pythonนิพจน์แลมบ์ดา (หรือรูปแบบแลมบ์ดา) ถูกนำมาใช้เพื่อสร้างฟังก์ชันที่ไม่ระบุชื่อ โดยคุณจะใช้ไฟล์ แลมบ์ดา คำหลัก (เช่นเดียวกับที่คุณใช้ def เพื่อกำหนดฟังก์ชันปกติ) ทุกฟังก์ชันที่ไม่ระบุตัวตนที่คุณกำหนด Python จะมีส่วนสำคัญ 3 ส่วน คือ

  • คำหลักแลมบ์ดา
  • พารามิเตอร์ (หรือตัวแปรที่ถูกผูกไว้) และ
  • ฟังก์ชั่นร่างกาย

ฟังก์ชัน lambda สามารถมีพารามิเตอร์จำนวนเท่าใดก็ได้ แต่ตัวฟังก์ชันจะมีได้เพียงพารามิเตอร์เท่านั้น หนึ่ง การแสดงออก. นอกจากนี้ lambda ยังเขียนด้วยโค้ดบรรทัดเดียวและสามารถเรียกใช้ได้ทันที คุณจะเห็นการทำงานทั้งหมดนี้ในตัวอย่างที่กำลังจะมาถึง

ไวยากรณ์และตัวอย่าง

ไวยากรณ์อย่างเป็นทางการในการเขียนฟังก์ชันแลมบ์ดามีดังต่อไปนี้:

lambda p1, p2: expression

ในที่นี้ p1 และ p2 คือพารามิเตอร์ที่ส่งผ่านไปยังฟังก์ชันแลมบ์ดา คุณสามารถเพิ่มพารามิเตอร์ได้มากหรือน้อยตามที่คุณต้องการ

อย่างไรก็ตาม โปรดสังเกตว่าเราไม่ได้ใช้วงเล็บเหลี่ยมล้อมรอบพารามิเตอร์เหมือนกับฟังก์ชันทั่วไป ส่วนสุดท้าย (นิพจน์) คือนิพจน์ใดๆ ที่ถูกต้อง Python นิพจน์ที่ทำงานกับพารามิเตอร์ที่คุณระบุให้กับฟังก์ชัน

1 ตัวอย่าง

ตอนนี้คุณรู้เกี่ยวกับแลมบ์ดาแล้ว เรามาลองดูตัวอย่างกัน ดังนั้นเปิดของคุณ IDLE และพิมพ์ตามนี้:

adder = lambda x, y: x + y
print (adder (1, 2))

Code คำอธิบาย

ที่นี่ เรากำหนดตัวแปรที่จะเก็บผลลัพธ์ที่ส่งคืนโดยฟังก์ชันแลมบ์ดา

1. คีย์เวิร์ด lambda ที่ใช้กำหนดฟังก์ชันที่ไม่ระบุชื่อ

2. x และ y คือพารามิเตอร์ที่เราส่งผ่านไปยังฟังก์ชันแลมบ์ดา

3. นี่คือเนื้อความของฟังก์ชัน ซึ่งจะเพิ่มพารามิเตอร์ 2 ตัวที่เราส่งผ่าน โปรดสังเกตว่ามันเป็นนิพจน์เดียว คุณไม่สามารถเขียนหลายคำสั่งในเนื้อความของฟังก์ชันแลมบ์ดาได้

4. เราเรียกใช้ฟังก์ชันและพิมพ์ค่าที่ส่งคืน

2 ตัวอย่าง

นั่นเป็นตัวอย่างพื้นฐานเพื่อทำความเข้าใจหลักการและไวยากรณ์ของแลมบ์ดา ตอนนี้เรามาลองพิมพ์แลมบ์ดาออกมาและดูผลลัพธ์กันอีกครั้ง เปิดไฟล์ของคุณ IDLE และพิมพ์ตามนี้:

#What a lambda returns
string='some kind of a useless lambda'
print(lambda string : print(string))

ตอนนี้บันทึกไฟล์ของคุณแล้วกด F5 เพื่อเรียกใช้โปรแกรม นี่คือผลลัพธ์ที่คุณควรได้รับ

Output:

<function <lambda> at 0x00000185C3BF81E0>

เกิดอะไรขึ้นที่นี่? มาดูโค้ดกันเพื่อทำความเข้าใจเพิ่มเติม

Code คำอธิบาย:

1. ในที่นี้ เราจะกำหนดนิยามของ เชือก ซึ่งคุณจะส่งเป็นพารามิเตอร์ให้กับฟังก์ชันแลมบ์ดา

2. เราประกาศฟังก์ชันแลมบ์ดาที่เรียกใช้คำสั่ง print และพิมพ์ผลลัพธ์ออกมา

แต่ทำไมโปรแกรมจึงไม่พิมพ์สตริงที่เราส่งเข้าไป? นั่นเป็นเพราะว่าฟังก์ชันแลมบ์ดาเองส่งคืนอ็อบเจ็กต์ฟังก์ชัน ในตัวอย่างนี้ ฟังก์ชันแลมบ์ดาไม่ได้ถูกส่งกลับไป ที่เรียกว่า โดยใช้ฟังก์ชันการพิมพ์ แต่เป็นเพียง การคืน อ็อบเจ็กต์ฟังก์ชันและตำแหน่งหน่วยความจำที่เก็บอ็อบเจ็กต์นั้นไว้ นั่นคือสิ่งที่จะแสดงออกมาที่คอนโซล

3 ตัวอย่าง

อย่างไรก็ตาม หากคุณเขียนโปรแกรมในลักษณะนี้:

#What a lambda returns #2
x="some kind of a useless lambda"
(lambda x : print(x))(x)

จากนั้นเรียกใช้งานโดยกดปุ่ม F5 คุณจะเห็นผลลัพธ์แบบนี้

Output:

some kind of a useless lambda

ตอนนี้ฟังก์ชันแลมบ์ดาถูกเรียกใช้งานแล้ว และสตริงที่เราส่งเข้าไปก็ถูกพิมพ์ออกมาที่คอนโซล แต่ไวยากรณ์แปลกๆ นั้นคืออะไร และทำไมคำนิยามของฟังก์ชันแลมบ์ดาจึงถูกครอบด้วยวงเล็บ? มาทำความเข้าใจกันตอนนี้เลย

Code คำอธิบาย:

1. นี่คือสตริงเดียวกันกับที่เรากำหนดไว้ในตัวอย่างก่อนหน้านี้

2. ในส่วนนี้ เราจะกำหนดฟังก์ชันแลมบ์ดาและเรียกใช้งานทันทีโดยส่งสตริงเป็นอาร์กิวเมนต์ นี่คือสิ่งที่เรียกว่า IIFE (Intelligent Interpreter Function) และคุณจะได้เรียนรู้เพิ่มเติมเกี่ยวกับเรื่องนี้ในส่วนถัดไปของบทเรียนนี้

4 ตัวอย่าง

มาดูตัวอย่างสุดท้ายเพื่อทำความเข้าใจวิธีการทำงานของแลมบ์ดาและฟังก์ชันทั่วไปกัน ดังนั้น เปิดไฟล์ของคุณ IDLE และในไฟล์ใหม่ ให้พิมพ์ดังต่อไปนี้:

#A REGULAR FUNCTION
def guru( funct, *args ):
funct( *args )
def printer_one( arg ):
return print (arg)
def printer_two( arg ):
print(arg)
#CALL A REGULAR FUNCTION 
guru( printer_one, 'printer 1 REGULAR CALL' )
guru( printer_two, 'printer 2 REGULAR CALL \n' )
#CALL A REGULAR FUNCTION THRU A LAMBDA
guru(lambda: printer_one('printer 1 LAMBDA CALL'))
guru(lambda: printer_two('printer 2 LAMBDA CALL'))

ตอนนี้ บันทึกไฟล์แล้วกด F5 เพื่อเรียกใช้โปรแกรม ถ้าคุณไม่ได้ทำผิดพลาดอะไร ผลลัพธ์ควรจะเป็นประมาณนี้

Output:

printer 1 REGULAR CALL

printer 2 REGULAR CALL

printer 1 LAMBDA CALL

printer 2 LAMBDA CALL

Code คำอธิบาย:

1. ฟังก์ชันชื่อ guru ซึ่งรับฟังก์ชันอื่นเป็นพารามิเตอร์ตัวแรก และตามด้วยอาร์กิวเมนต์อื่นๆ

2. printer_one เป็นฟังก์ชันง่ายๆ ที่พิมพ์ค่าพารามิเตอร์ที่ส่งเข้ามาและส่งคืนค่านั้น

3. printer_two คล้ายกับ printer_one แต่ไม่มีคำสั่ง return

4. ในส่วนนี้ เราจะเรียกใช้ฟังก์ชัน guru และส่งฟังก์ชันของเครื่องพิมพ์และสตริงเป็นพารามิเตอร์

5. นี่คือไวยากรณ์ที่จะใช้ในการดำเนินการขั้นตอนที่สี่ (เช่น การเรียกใช้ฟังก์ชันผู้เชี่ยวชาญ) โดยใช้แลมบ์ดา

ในส่วนถัดไป คุณจะได้เรียนรู้วิธีใช้ฟังก์ชัน lambda ด้วย แผนที่(), ลด()และ กรอง() in Python.

การใช้แลมบ์ดาด้วย Python ในตัว

ฟังก์ชัน Lambda มอบวิธีการอันสง่างามและทรงพลังในการดำเนินการโดยใช้วิธีการในตัว Python- เป็นไปได้เนื่องจาก lambdas สามารถเรียกใช้ได้ทันทีและส่งผ่านเป็นอาร์กิวเมนต์ของฟังก์ชันเหล่านี้

IIFE เข้า Python แลมบ์ดา

IIFE ย่อมาจาก เรียกใช้ฟังก์ชันการดำเนินการทันที หมายความว่าฟังก์ชันแลมบ์ดาสามารถเรียกใช้งานได้ทันทีที่ถูกกำหนดขึ้น ลองมาทำความเข้าใจเรื่องนี้ด้วยตัวอย่างกัน เริ่มต้นใช้งานฟังก์ชันแลมบ์ดาของคุณ IDLE และพิมพ์ตามนี้:

 (lambda x: x + x)(2)

นี่คือคำอธิบายผลลัพธ์และโค้ด:

ความสามารถของแลมบ์ดาที่จะเรียกใช้ได้ทันทีทำให้คุณสามารถใช้มันภายในฟังก์ชันเช่น map() และ ลด () มันมีประโยชน์เพราะคุณอาจไม่ต้องการใช้ฟังก์ชันเหล่านี้อีก

แลมบ์ดาในตัวกรอง ()

ฟังก์ชั่นตัวกรองใช้เพื่อเลือกองค์ประกอบเฉพาะจากลำดับขององค์ประกอบ ลำดับสามารถเป็นตัววนซ้ำใดๆ เช่น รายการ เซต สิ่งอันดับ ฯลฯ

องค์ประกอบที่จะถูกเลือกนั้นขึ้นอยู่กับข้อจำกัดที่กำหนดไว้ล่วงหน้า โดยรับพารามิเตอร์ 2 ตัว:

  • ฟังก์ชันที่กำหนดข้อจำกัดในการกรอง
  • ลำดับ (ตัววนซ้ำใดๆ เช่น รายการ สิ่งอันดับ ฯลฯ)

ตัวอย่างเช่น

sequences = [10,2,8,7,5,4,3,11,0, 1]
filtered_result = filter (lambda x: x > 4, sequences) 
print(list(filtered_result))

นี่คือผลลัพธ์:

[10, 8, 7, 5, 11]

Code คำอธิบาย:

1. ในคำสั่งแรก เราจะกำหนดรายการที่เรียกว่าลำดับซึ่งประกอบด้วยตัวเลขบางตัว

2. ที่นี่ เราประกาศตัวแปรชื่อ filtered_result ซึ่งจะเก็บค่าที่กรองแล้วที่ส่งคืนโดยฟังก์ชัน filter()

3. ฟังก์ชันแลมบ์ดาที่ทำงานบนแต่ละองค์ประกอบของรายการและส่งกลับค่าจริงหากค่านั้นมากกว่า 4

4. พิมพ์ผลลัพธ์ที่ส่งคืนโดยฟังก์ชันตัวกรอง

แลมบ์ดาในแผนที่ ()

ฟังก์ชัน `map` ใช้สำหรับดำเนินการเฉพาะอย่างกับทุกองค์ประกอบในลำดับ เช่นเดียวกับฟังก์ชัน `filter()` ฟังก์ชันนี้ก็รับพารามิเตอร์ 2 ตัวเช่นกัน:

  1. ฟังก์ชันที่กำหนดการดำเนินการที่จะทำกับองค์ประกอบต่างๆ
  2. ลำดับหนึ่งหรือหลายลำดับ

ตัวอย่างเช่น นี่คือโปรแกรมที่พิมพ์ตัวเลขกำลังสองในรายการที่กำหนด:

sequences = [10,2,8,7,5,4,3,11,0, 1]
filtered_result = map (lambda x: x*x, sequences) 
print(list(filtered_result))

Output:

 [100, 4, 64, 49, 25, 16, 9, 121, 0, 1]

Code คำอธิบาย:

1. ในที่นี้ เรากำหนดรายการที่เรียกว่าลำดับ ซึ่งประกอบด้วยตัวเลขบางส่วน

2. เราประกาศตัวแปรชื่อ filtered_result ซึ่งจะใช้เก็บค่าที่แมปไว้

3. ฟังก์ชันแลมบ์ดาที่ทำงานกับแต่ละองค์ประกอบในรายการและส่งคืนค่ากำลังสองของตัวเลขนั้น

4. พิมพ์ผลลัพธ์ที่ได้จากฟังก์ชัน map

แลมบ์ดาลด ()

ฟังก์ชัน reduce เช่น map() ใช้ในการดำเนินการกับทุกองค์ประกอบในลำดับ อย่างไรก็ตาม ฟังก์ชันนี้แตกต่างจาก map ตรงที่การทำงาน ต่อไปนี้คือขั้นตอนที่ฟังก์ชัน reduce() ปฏิบัติตามเพื่อคำนวณเอาต์พุต:

ขั้นตอน 1) ดำเนินการตามการดำเนินการที่กำหนดไว้กับ 2 องค์ประกอบแรกของลำดับ

ขั้นตอน 2) บันทึกผลลัพธ์นี้

ขั้นตอน 3) ดำเนินการด้วยผลลัพธ์ที่บันทึกและองค์ประกอบถัดไปในลำดับ

ขั้นตอน 4) ทำซ้ำจนกว่าจะไม่มีองค์ประกอบเหลืออยู่

นอกจากนี้ยังใช้พารามิเตอร์สองตัวด้วย:

  1. ฟังก์ชั่นที่กำหนดการดำเนินการที่จะดำเนินการ
  2. ลำดับ (ตัววนซ้ำใดๆ เช่น รายการ สิ่งอันดับ ฯลฯ)

ตัวอย่างเช่น นี่คือโปรแกรมที่ส่งคืนผลคูณขององค์ประกอบทั้งหมดในรายการ:

from functools import reduce
sequences = [1,2,3,4,5]
product = reduce (lambda x, y: x*y, sequences)
print(product)

นี่คือผลลัพธ์:

120

Code คำอธิบาย:

1. นำเข้าฟังก์ชัน reduce จากโมดูล functools

2. ในที่นี้ เรากำหนดรายการที่เรียกว่าลำดับ ซึ่งประกอบด้วยตัวเลขบางส่วน

3. เราประกาศตัวแปรชื่อ product ซึ่งจะเก็บค่าที่ลดลงแล้ว

4. ฟังก์ชันแลมบ์ดาที่ทำงานกับแต่ละองค์ประกอบในรายการ โดยจะส่งคืนผลคูณของตัวเลขนั้นตามผลลัพธ์ก่อนหน้า

5. พิมพ์ผลลัพธ์ที่ได้จากฟังก์ชัน reduce

ทำไม (และทำไมไม่) ใช้ฟังก์ชันแลมบ์ดา?

ดังที่คุณจะเห็นในส่วนถัดไป lambdas จะได้รับการปฏิบัติเหมือนกับฟังก์ชันปกติในระดับล่าม ในทางหนึ่ง คุณสามารถพูดได้ว่า lambdas มีไวยากรณ์ขนาดกะทัดรัดสำหรับการเขียนฟังก์ชันซึ่งส่งคืนนิพจน์เดียว

อย่างไรก็ตาม คุณควรทราบว่าเมื่อใดควรใช้แลมบ์ดา และเมื่อใดควรหลีกเลี่ยง ในส่วนนี้ คุณจะได้เรียนรู้หลักการออกแบบบางประการที่ใช้โดย Python นักพัฒนาเมื่อเขียนฟังก์ชันแลมบ์ดา

หนึ่งในกรณีการใช้งานแลมบ์ดาที่พบบ่อยที่สุดคือในการเขียนโปรแกรมเชิงฟังก์ชัน เนื่องจาก Python รองรับกระบวนทัศน์ (หรือสไตล์) ของการเขียนโปรแกรมที่เรียกว่าการเขียนโปรแกรมเชิงฟังก์ชัน

มันช่วยให้คุณสามารถส่งฟังก์ชันเป็นพารามิเตอร์ให้กับฟังก์ชันอื่นได้ (ตัวอย่างเช่น ในฟังก์ชัน map, filter เป็นต้น) ในกรณีเช่นนี้ การใช้แลมบ์ดาเป็นวิธีที่สง่างามในการสร้างฟังก์ชันที่ใช้เพียงครั้งเดียวและส่งเป็นพารามิเตอร์

เมื่อใดที่คุณไม่ควรใช้ Lambda

คุณไม่ควรเขียนฟังก์ชันแลมบ์ดาที่ซับซ้อนในสภาพแวดล้อมการผลิต เพราะจะทำให้ผู้เข้ารหัสที่ดูแลโค้ดของคุณถอดรหัสได้ยาก หากคุณพบว่าตัวเองกำลังสร้างนิพจน์บรรทัดเดียวที่ซับซ้อน การกำหนดฟังก์ชันที่เหมาะสมจะเป็นวิธีที่ดีกว่ามาก แนวทางปฏิบัติที่ดีที่สุดคือ คุณต้องจำไว้ว่าโค้ดที่เรียบง่ายนั้นดีกว่าโค้ดที่ซับซ้อนเสมอ

Lambdas กับฟังก์ชันปกติ

ดังที่กล่าวไว้ก่อนหน้านี้ แลมบ์ดาเป็นเพียงฟังก์ชันที่ไม่มีตัวระบุผูกติดอยู่กับมัน กล่าวอย่างง่ายๆ ก็คือ ฟังก์ชันที่ไม่มีชื่อ (ดังนั้นจึงเรียกว่า ฟังก์ชันนิรนาม) ต่อไปนี้เป็นตารางเพื่อแสดงความแตกต่างระหว่างแลมบ์ดาและฟังก์ชันทั่วไป Python.

แลมบ์ดาส ฟังก์ชั่นปกติ
ไวยากรณ์:

lambda x : x + x
ไวยากรณ์:

def (x) :
return x + x 
ฟังก์ชัน Lambda สามารถมีนิพจน์ในร่างกายได้เพียงนิพจน์เดียวเท่านั้น ฟังก์ชันปกติสามารถมีนิพจน์และคำสั่งได้หลายรายการในร่างกาย
ฟังก์ชันแลมบ์ดาไม่มีชื่อเรียกเฉพาะ ดังนั้นจึงเรียกอีกอย่างว่าฟังก์ชันนิรนาม ฟังก์ชันปกติต้องมีชื่อและลายเซ็น
Lambdas ไม่มีคำสั่ง return เนื่องจากเนื้อหาจะถูกส่งคืนโดยอัตโนมัติ ฟังก์ชันที่ต้องการส่งค่ากลับจะต้องมีคำสั่ง `return` อยู่ด้วย

อธิบายความแตกต่าง

ความแตกต่างหลักระหว่างแลมบ์ดาและฟังก์ชันปกติก็คือ ฟังก์ชันแลมบ์ดาจะประเมินเพียงนิพจน์เดียวและให้ผลลัพธ์เป็นวัตถุฟังก์ชัน ด้วยเหตุนี้ เราจึงสามารถตั้งชื่อผลลัพธ์ของฟังก์ชัน lambda และใช้ในโปรแกรมของเราได้เหมือนที่เราทำในตัวอย่างก่อนหน้านี้

ฟังก์ชันปกติสำหรับตัวอย่างข้างต้นจะมีลักษณะดังนี้:

def adder (x, y):
return x + y 
print (adder (1, 2))

ในที่นี้ เราต้องนิยาม a พร้อมชื่อ สำหรับฟังก์ชันซึ่ง รับคืน ผลลัพธ์เมื่อเรา โทรศัพท์ ฟังก์ชันแลมบ์ดาไม่มีคำสั่ง return เพราะจะมีเพียงนิพจน์เดียวซึ่งจะถูกส่งกลับโดยค่าเริ่มต้นเสมอ คุณไม่จำเป็นต้องกำหนดค่าให้กับแลมบ์ดาด้วยซ้ำ เพราะสามารถเรียกใช้งานได้ทันที (ดูในส่วนก่อนหน้า) ดังที่คุณจะเห็น แลมบ์ดาจะมีประสิทธิภาพเป็นพิเศษเมื่อเราใช้มันร่วมกับ... Pythonฟังก์ชันในตัวของ

อย่างไรก็ตาม คุณอาจยังคงสงสัยว่า lambdas แตกต่างจากฟังก์ชันที่ส่งคืนนิพจน์เดียวอย่างไร (เหมือนกับตัวอย่างข้างต้น) ในระดับล่ามไม่มีความแตกต่างกันมากนัก อาจฟังดูน่าประหลาดใจ แต่ฟังก์ชัน lambda ใดๆ ที่คุณกำหนดไว้ Python ล่ามจะถือเป็นฟังก์ชันปกติ

ในระดับไบต์โค้ด นิยามทั้งสองจะได้รับการจัดการในลักษณะเดียวกันโดย Python ตัวแปลภาษา ตอนนี้ คุณไม่สามารถตั้งชื่อฟังก์ชันได้ แลมบ์ดา เพราะมันถูกสงวนไว้โดย Pythonแต่ชื่อฟังก์ชันอื่นใดก็จะให้ผลลัพธ์เป็นไบต์โค้ดเดียวกัน

คำถามที่พบบ่อย

ใช่แล้ว ฟังก์ชันแลมบ์ดาสามารถใช้เงื่อนไขได้ เช่น lambda x: 'even' if x % 2 == 0 else 'odd' แต่ไม่สามารถใช้คำสั่ง if เต็มรูปแบบได้ เพราะเนื้อหาของฟังก์ชันแลมบ์ดาต้องเป็นนิพจน์เดียว ไม่ใช่กลุ่มคำสั่ง

โดยทั่วไปแล้วไม่ใช่ PEP 8 แนะนำให้ใช้ `def` เมื่อฟังก์ชันต้องการชื่อ เพราะการผูกแลมบ์ดากับตัวแปรจะทำให้มันมีชื่อแต่ก็ทำให้ความชัดเจนลดลง traceback ที่ def ให้มานั้น Lambda เหมาะที่สุดที่จะส่งตรงไปยังฟังก์ชันต่างๆ เช่น sorted(), map() หรือ filter()

ไม่ ในระดับไบต์โค้ด Python ฟังก์ชันแลมบ์ดาและฟังก์ชันที่เทียบเท่ากันจะถูกจัดการในลักษณะเดียวกัน ดังนั้นจึงไม่มีข้อได้เปรียบด้านความเร็ว ฟังก์ชันแลมบ์ดาช่วยประหยัดโค้ดได้เพียงบรรทัดเดียวเท่านั้น ไม่ได้ทำงานเร็วกว่าฟังก์ชันที่มีชื่อซึ่งทำงานเหมือนกัน

ใช่แล้ว ฟังก์ชันแลมบ์ดาสามารถอ่านตัวแปรจากขอบเขตที่ครอบคลุมอยู่ได้ ทำให้เกิดเป็นโคลเชอร์ แต่ภายในลูป ต้องระวัง: ฟังก์ชันแลมบ์ดาจะจับเฉพาะตัวตัวแปร ไม่ใช่ค่าปัจจุบันของมัน ดังนั้นควรใช้พารามิเตอร์เริ่มต้น เช่น lambda x, n=n: x + n เพื่อตรึงค่าตัวแปรนั้นไว้

ส่งฟังก์ชันแลมบ์ดาเป็นอาร์กิวเมนต์หลักให้กับฟังก์ชัน sorted() หรือ list.sort() ตัวอย่างเช่น sorted(users, key=lambda u: u['age']) จะเรียงลำดับรายการตามอายุ ฟังก์ชันแลมบ์ดาจะบอก... Python ควรเปรียบเทียบค่าใดสำหรับแต่ละองค์ประกอบ ทำให้สามารถเรียงลำดับแบบกำหนดเองได้อย่างกระชับโดยไม่ต้องใช้ฟังก์ชันที่มีชื่อแยกต่างหาก

โดยตรงแล้วทำไม่ได้ เพราะแลมบ์ดาแบบไม่ระบุชื่อไม่มีชื่อให้ใช้อ้างอิง คุณอาจแก้ไขปัญหานี้ได้โดยการกำหนดแลมบ์ดาให้กับตัวแปรแล้วเรียกใช้ตามชื่อตัวแปรนั้น แต่การใช้ฟังก์ชัน def แบบปกติเป็นวิธีที่ชัดเจนกว่าและแนะนำสำหรับการเรียกซ้ำ

ฟังก์ชัน Lambda ช่วยให้การแปลงข้อมูลแบบอินไลน์ในโค้ด AI และแมชชีนเลิร์นนิงทำได้อย่างรวดเร็ว นักวิทยาศาสตร์ข้อมูลส่งฟังก์ชัน Lambda ไปยัง pandas .apply(), map() และ filter() เพื่อทำความสะอาดหรือจัดรูปแบบข้อมูล และใช้เป็นฟังก์ชันหลักในการจัดเรียงคุณลักษณะต่างๆping การประมวลผลล่วงหน้าอย่างกระชับภายในกระบวนการฝึกอบรมขนาดใหญ่

GitHub Copilot จะแนะนำนิพจน์แลมบ์ดาที่สมบูรณ์จากข้อความแสดงความคิดเห็นสั้นๆ หรือโค้ดโดยรอบ รวมถึงพารามิเตอร์และนิพจน์ที่ถูกต้องสำหรับการเรียกใช้ map(), filter() หรือ sorted() นอกจากนี้ยังสามารถเสนอการแปลงแลมบ์ดาที่ยาวเกินไปให้เป็นฟังก์ชันที่มีชื่อชัดเจนยิ่งขึ้นเมื่อความสามารถในการอ่านมีความสำคัญ

สรุปโพสต์นี้ด้วย: