วิธีใช้ฟังก์ชันแลมบ์ดาใน Python [พร้อมตัวอย่าง]
เผยแพร่แล้ว: 2022-11-10ในบทช่วยสอนนี้ คุณจะได้เรียนรู้ทั้งหมดเกี่ยวกับฟังก์ชันแลมบ์ดาใน Python ตั้งแต่ไวยากรณ์เพื่อกำหนดฟังก์ชันแลมบ์ดาไปจนถึงกรณีการใช้งานต่างๆ พร้อมตัวอย่างโค้ด
ใน Python แลมบ์ดาเป็นฟังก์ชันที่ ไม่ระบุชื่อ ซึ่งมีรูปแบบไวยากรณ์ที่กระชับและสามารถใช้กับฟังก์ชันในตัวที่เป็นประโยชน์อื่นๆ ในตอนท้ายของบทช่วยสอนนี้ คุณจะได้เรียนรู้วิธีกำหนดฟังก์ชันแลมบ์ดาและเมื่อใดที่คุณควรพิจารณาใช้แทนฟังก์ชัน Python ปกติ
เอาล่ะ!
ฟังก์ชัน Python Lambda: ไวยากรณ์และตัวอย่าง
นี่คือไวยากรณ์ทั่วไปในการกำหนดฟังก์ชันแลมบ์ดาใน Python:
lambda parameter(s):return value
ในไวยากรณ์ทั่วไปข้างต้น:
- แลมบ์ดา คือคีย์เวิร์ดที่คุณควรใช้เพื่อกำหนดฟังก์ชันแลมบ์ดา ตามด้วย พารามิเตอร์ อย่างน้อยหนึ่งตัวที่ฟังก์ชันควรใช้
- มีโคลอนคั่นพารามิเตอร์และ ค่าที่ส่งกลับ
เมื่อกำหนดฟังก์ชันแลมบ์ดา คุณควรตรวจสอบให้แน่ใจว่าค่าส่งคืนถูกคำนวณโดยการประเมินนิพจน์ที่ครอบคลุมโค้ดบรรทัดเดียว คุณจะเข้าใจสิ่งนี้ดีขึ้นเมื่อเราโค้ดตัวอย่าง
ตัวอย่างฟังก์ชัน Python Lambda
วิธีที่ดีที่สุดในการทำความเข้าใจฟังก์ชันแลมบ์ดาคือการเริ่มต้นด้วยการเขียนฟังก์ชัน Python ปกติเป็นฟังก์ชันแลมบ์ดา
คุณสามารถเขียนโค้ดใน Python REPL หรือในตัวแก้ไข Python ออนไลน์ของ Geekflare
#1 . พิจารณาฟังก์ชันต่อไปนี้ square()
ซึ่งรับค่าตัวเลข num
เป็นอาร์กิวเมนต์และส่งกลับค่ากำลังสองของตัวเลข
def square(num): return num*num
คุณสามารถเรียกใช้ฟังก์ชันด้วยอาร์กิวเมนต์และตรวจสอบว่าฟังก์ชันทำงานอย่างถูกต้อง
>>> square(9) 81 >>> square(12) 144
คุณสามารถกำหนดนิพจน์แลมบ์ดานี้ให้กับชื่อตัวแปร เช่น square1
เพื่อให้คำจำกัดความของฟังก์ชันกระชับยิ่งขึ้น: square1 = lambda num: num*num
จากนั้นเรียกใช้ฟังก์ชัน square1
ด้วยตัวเลขใดๆ เป็นอาร์กิวเมนต์ อย่างไรก็ตาม เราทราบดีว่า lambdas เป็นฟังก์ชันที่ไม่ระบุตัวตน ดังนั้น คุณจึงควรหลีกเลี่ยงการกำหนดให้กับตัวแปร
สำหรับฟังก์ชัน square()
พารามิเตอร์คือ num
และค่าที่ส่งคืนคือ num*num
หลังจากที่เราระบุสิ่งเหล่านี้แล้ว เราสามารถรวมพวกมันในนิพจน์แลมบ์ดาและเรียกมันด้วยอาร์กิวเมนต์ ดังที่แสดง:
>>> (lambda num: num*num)(2) 4
นี่คือแนวคิดของนิพจน์ฟังก์ชันที่เรียกใช้ทันที ซึ่งเราเรียกใช้ฟังก์ชันทันทีหลังจากกำหนด
#2 . ต่อไป เรามาเขียนฟังก์ชันง่ายๆ ใหม่ add()
ที่รวมตัวเลข num1
และ num2
แล้วส่งกลับผลรวม num1 + num2
def add(num1,num2): return num1 + num2
ให้เรียกฟังก์ชัน add()
ที่มีตัวเลขสองตัวเป็นอาร์กิวเมนต์:
>>> add(4,3) 7 >>> add(12,5) 17 >>> add(12,6) 18
ในกรณีนี้ num1
และ num2
เป็นพารามิเตอร์สองตัว และค่าที่ส่งคืนคือ num1 + num2
>>> (lambda num1, num2: num1 + num2)(3,7) 10
ฟังก์ชัน Python สามารถใช้ค่าเริ่มต้นสำหรับพารามิเตอร์ได้ มาแก้ไขคำจำกัดความของฟังก์ชัน add()
และตั้งค่าเริ่มต้นของพารามิเตอร์ num2
เป็น 10
def add(num1, num2=10): return num1 + num2
ในการเรียกใช้ฟังก์ชันต่อไปนี้:
- ในการเรียกใช้ฟังก์ชันครั้งแรก ค่าของ
num1
คือ 1 และค่าของnum2
คือ 3 เมื่อคุณส่งผ่านค่าของnum2
ในการเรียกใช้ฟังก์ชัน ค่านั้นจะถูกใช้ ฟังก์ชั่นส่งคืน 4
- อย่างไรก็ตาม หากคุณส่งผ่านอาร์กิวเมนต์เพียงอาร์กิวเมนต์เดียว (
num1
คือ 7) ค่าเริ่มต้น 10 จะใช้สำหรับnum2
; ฟังก์ชั่นส่งคืน 17
>>> add(1,3) 4 >>> add(7) 17
เมื่อเขียนฟังก์ชันที่ใช้ค่าเริ่มต้นสำหรับพารามิเตอร์บางตัวเป็นนิพจน์แลมบ์ดา คุณสามารถระบุค่าเริ่มต้นเมื่อกำหนดพารามิเตอร์
>>> (lambda num1, num2 = 10: num1 + num2)(1) 11
คุณควรใช้ฟังก์ชันแลมบ์ดาใน Python เมื่อใด
ตอนนี้คุณได้เรียนรู้พื้นฐานของฟังก์ชันแลมบ์ดาใน Python แล้ว ต่อไปนี้คือกรณีการใช้งานบางส่วน:
- เมื่อคุณมีฟังก์ชันที่มีนิพจน์ส่งคืนเป็นโค้ดบรรทัดเดียว และคุณไม่จำเป็นต้องอ้างอิงฟังก์ชันที่อื่นในโมดูลเดียวกัน คุณสามารถใช้ฟังก์ชันแลมบ์ดาได้ เรายังได้เขียนโค้ดตัวอย่างบางส่วนเพื่อทำความเข้าใจเรื่องนี้
- คุณสามารถใช้ฟังก์ชันแลมบ์ดาเมื่อใช้ฟังก์ชันในตัว เช่น map(), filter() และ reduce()
- ฟังก์ชันแลมบ์ดามีประโยชน์ในการจัดเรียงโครงสร้างข้อมูล Python เช่น รายการและพจนานุกรม
วิธีใช้ Python Lambda พร้อมฟังก์ชันในตัว
1. การใช้แลมบ์ดากับ map()
ฟังก์ชัน map()
ใช้ฟังก์ชัน iterable และฟังก์ชัน และใช้ฟังก์ชันนี้กับแต่ละรายการใน iterable ดังที่แสดง:

มาสร้างรายการ nums
และใช้ฟังก์ชัน map()
เพื่อสร้างรายการใหม่ที่มีช่องสี่เหลี่ยมของตัวเลขแต่ละตัวในรายการ nums
สังเกตการใช้ฟังก์ชันแลมบ์ดาเพื่อกำหนดการดำเนินการกำลังสอง
>>> nums = [4,5,6,9] >>> list(map(lambda num:num*num,nums)) [16, 25, 36, 81]
เนื่องจากฟังก์ชัน map()
ส่งคืนอ็อบเจ็กต์แผนที่ เราจึงควรใส่ลงในรายการ
️ ดูบทช่วยสอนนี้เกี่ยวกับฟังก์ชัน map() ใน Python
2. การใช้แลมบ์ดากับตัวกรอง ()
มากำหนดกัน nums
รายการของตัวเลข:
>>> nums = [4,5,6,9]
สมมติว่าคุณต้องการกรองรายการนี้และเก็บเฉพาะเลขคี่
คุณสามารถใช้ฟังก์ชัน filter()
ในตัวของ Python
ฟังก์ชัน filter()
ใช้ เงื่อนไข และตัวกรอง iterable : filter(condition, iterable)
ผลลัพธ์มีเฉพาะองค์ประกอบใน iterable ดั้งเดิมที่ตรงตามเงื่อนไข คุณสามารถส่งวัตถุที่ส่งคืนไปยัง Python iterable เช่นรายการ

ในการกรองเลขคู่ทั้งหมดออก เราจะเก็บเฉพาะเลขคี่เท่านั้น ดังนั้นนิพจน์แลมบ์ดาควรเป็น lambda num: num%2!=0
ปริมาณ num%2
คือส่วนที่เหลือเมื่อ num
หารด้วย 2
-
num%2!=0
จะเป็นTrue
เมื่อใดก็ตามที่num
เป็นเลขคี่ และ -
num%2!=0
เป็นFalse
เมื่อnum
เป็นคู่
>>> nums = [4,5,6,9] >>> list(filter(lambda num:num%2!=0,nums)) [5, 9]
3. การใช้แลมบ์ดากับ reduce()
ฟังก์ชัน reduce()
ใช้ฟังก์ชัน iterable และฟังก์ชัน มันลด iterable โดยใช้ฟังก์ชัน iteratively กับรายการของ iterable


หากต้องการใช้ฟังก์ชัน reduce()
คุณจะต้องนำเข้าจากโมดูล functools
ในตัวของ Python:
>>> from functools import reduce
ลองใช้ฟังก์ชัน reduce()
เพื่อคำนวณผลรวมของตัวเลขทั้งหมดในรายการ nums
เรากำหนดนิพจน์แลมบ์ดา: lambda num1,num2:num1+num2
เป็นฟังก์ชันผลรวมการลด
การดำเนินการลดจะเกิดขึ้นดังนี้: f(f(f(4,5),6),9) = f(f(9,6),9) = f(15,9) = 24 ที่นี่ f คือ การดำเนินการสรุปในสองรายการของรายการ ซึ่งกำหนดโดยฟังก์ชันแลมบ์ดา
>>> from functools import reduce >>> nums = [4,5,6,9] >>> reduce(lambda num1,num2:num1+num2,nums) 24
ฟังก์ชั่น Python Lambda เพื่อปรับแต่งการเรียงลำดับ
นอกจากการใช้ฟังก์ชันแลมบ์ดาที่มีฟังก์ชัน Python ในตัว เช่น map()
, filter()
และ reduce()
แล้ว คุณยังสามารถใช้ฟังก์ชันเหล่านี้เพื่อปรับแต่งฟังก์ชันในตัวและวิธีการที่ใช้สำหรับการจัดเรียง

1. การเรียงลำดับรายการหลาม
เมื่อทำงานกับรายการ Python คุณมักจะต้องเรียงลำดับตามเกณฑ์การเรียงลำดับบางอย่าง ในการจัดเรียงรายการ Python คุณสามารถใช้เมธอด sort()
ในตัวได้ หากคุณต้องการสำเนาของรายการ คุณสามารถใช้ฟังก์ชัน sorted()
ไวยากรณ์การใช้ฟังก์ชัน sorted
sorted()
ของ Python ถูกsorted(iterable, key=...,reverse= True | False)
– พารามิเตอร์key
ใช้เพื่อปรับแต่งการเรียงลำดับ
– พารามิเตอร์reverse
สามารถตั้งค่าเป็นTrue
หรือFalse
ได้ ค่าเริ่มต้นคือFalse
เมื่อเรียงลำดับรายการตัวเลขและสตริง การเรียงลำดับเริ่มต้นจะเรียงลำดับจากน้อยไปหามากและตามลำดับตัวอักษรตามลำดับ อย่างไรก็ตาม บางครั้งคุณอาจต้องการกำหนดเกณฑ์ที่กำหนดเองสำหรับการเรียงลำดับ
พิจารณารายการต่อไปนี้ fruits
. สมมติว่าคุณต้องการรับสำเนาที่เรียงลำดับของรายการ คุณควรจัดเรียงสตริงตามจำนวนการเกิดขึ้นของ 'p' ในสตริงนั้น ตามลำดับที่ลดลง
>>> fruits = ['apple','pineapple','grapes','mango']
ได้เวลาใช้พารามิเตอร์ key
เสริมแล้ว สตริงสามารถทำซ้ำได้ใน Python และเพื่อให้ได้จำนวนอักขระที่เกิดขึ้น คุณสามารถใช้เมธอด . .count()
ในตัว ดังนั้นเราจึงตั้งค่า key
เป็น lambda x:x.count('p')
เพื่อให้การเรียงลำดับขึ้นอยู่กับจำนวนครั้งที่ 'p' เกิดขึ้นในสตริง
>>> fruits = ['apple','pineapple','grapes','mango'] >>> sorted(fruits,key=lambda x:x.count('p'),reverse=True) ['pineapple', 'apple', 'grapes', 'mango']
ในตัวอย่างนี้:
-
key
ในการจัดเรียงคือจำนวนครั้งของอักขระ 'p' และถูกกำหนดให้เป็นนิพจน์แลมบ์ดา - เนื่องจากเราได้ตั้งค่าพารามิเตอร์
reverse
เป็นTrue
การเรียงลำดับจะเกิดขึ้นตามลำดับจำนวนครั้งของ 'p' ที่ลดลง
ในรายการ fruits
'สับปะรด' มี 'p' 3 ครั้ง และสตริง 'apple', 'grapes' และ 'mango' มี 'p' 2, 1 และ 0 ครั้งตามลำดับ
ทำความเข้าใจการเรียงลำดับที่เสถียร
ขอพิจารณาอีกตัวอย่างหนึ่ง สำหรับเกณฑ์การจัดเรียงเดียวกัน เราได้กำหนดรายการ fruits
ใหม่ ที่นี่ 'p' เกิดขึ้นในสตริง 'apple' และ 'grapes' สองครั้งและหนึ่งครั้งตามลำดับ และไม่เคยเกิดขึ้นในสตริง 'มะม่วง' และ 'แตง'
>>> fruits = ['mango','apple','melon','grapes'] >>> sorted(fruits,key=lambda x:x.count('p'),reverse=True) ['apple', 'grapes', 'mango', 'melon']
ในรายการผลลัพธ์ 'มะม่วง' มาก่อน 'แตง' แม้ว่าทั้งคู่จะไม่มีอักขระ 'p' ก็ตาม แต่ทำไมถึงเป็นเช่นนี้? ฟังก์ชัน sorted sorted()
ทำการเรียงลำดับที่เสถียร ดังนั้นเมื่อจำนวน 'p' เท่ากับสองสตริง ลำดับขององค์ประกอบในรายการ fruits
ดั้งเดิมจะยังคงอยู่
ในการออกกำลังกายอย่างรวดเร็ว ให้สลับตำแหน่งของ 'มะม่วง' และ 'แตง' ในรายการ
fruits
จัดเรียงรายการตามเกณฑ์เดียวกัน และสังเกตผลลัพธ์
️ เรียนรู้เพิ่มเติมเกี่ยวกับการเรียงลำดับรายการ Python
2. การเรียงลำดับพจนานุกรมหลาม
คุณยังสามารถใช้ lambdas เมื่อเรียงลำดับพจนานุกรม Python พิจารณาพจนานุกรม price_dict
ต่อไปนี้ที่มีรายการและราคา
>>> price_dict = { ... 'Milk':10, ... 'Honey':15, ... 'Bread':7, ... 'Candy':3 ... }
ในการรับคู่คีย์-ค่าของพจนานุกรมเป็นรายการทูเพิล คุณสามารถใช้เมธอดพจนานุกรมในตัว . .items()
:
>>> price_dict_items = price_dict.items() dict_items([('Milk', 10), ('Honey', 15), ('Bread', 7), ('Candy', 3)])
ใน Python ทำซ้ำได้ทั้งหมด: รายการ ทูเพิล สตริง และอื่นๆ ทำตามการสร้างดัชนีศูนย์ รายการแรกอยู่ที่ดัชนี 0 รายการที่สองอยู่ที่ดัชนี 1 เป็นต้น
เราต้องการจัดเรียงตามมูลค่า ซึ่งเป็นราคาของแต่ละรายการในพจนานุกรม ในแต่ละทูเพิลในรายการ price_dict_items
รายการที่ดัชนี 1 คือราคา ดังนั้นเราจึงตั้งค่า key
เป็น lambda x:x[1]
เนื่องจากจะใช้รายการที่ดัชนี 1 ซึ่งเป็นราคาเพื่อจัดเรียงพจนานุกรม
>>> dict(sorted(price_dict_items,key=lambda x:x[1])) {'Candy': 3, 'Bread': 7, 'Milk': 10, 'Honey': 15}
ในผลลัพธ์ รายการพจนานุกรมได้รับการเรียงลำดับจากน้อยไปมากของราคา: เริ่มต้นด้วย 'Candy' ราคา 3 หน่วยเป็น 'น้ำผึ้ง' ราคา 15 หน่วย
️ หากต้องการเรียนรู้เพิ่มเติม โปรดดูคำแนะนำโดยละเอียดเกี่ยวกับการจัดเรียงพจนานุกรม Python ตามคีย์และค่า
สรุป
และที่นั่นคุณมีมัน! คุณได้เรียนรู้วิธีการกำหนดฟังก์ชันแลมบ์ดาและใช้งานอย่างมีประสิทธิภาพกับฟังก์ชันอื่นๆ ในตัวของ Python นี่คือบทสรุปของประเด็นสำคัญ:
- ใน Python แลมบ์ดาเป็น ฟังก์ชันที่ไม่ระบุชื่อ ซึ่งสามารถรับหลายอาร์กิวเมนต์และส่งกลับค่า นิพจน์ที่จะประเมินเพื่อสร้างมูลค่าที่ส่งกลับนี้ควรเป็นโค้ดหนึ่งบรรทัด สามารถใช้เพื่อทำให้คำจำกัดความของฟังก์ชันขนาดเล็กกระชับขึ้นได้
- ในการกำหนดฟังก์ชัน Lambda คุณสามารถใช้ไวยากรณ์: lambda Parameter(s): return value
- กรณีการใช้งานที่สำคัญบางกรณีรวมถึงการใช้กับฟังก์ชัน
map()
,filter()
และreduce()
และเป็นพารามิเตอร์หลักในการปรับแต่งการเรียงลำดับของ Python iterables
ต่อไป เรียนรู้วิธีการแบ่งชั้นใน Python