Python – Anonymous function
anonymous ฟังก์ชัน คือฟังก์ชันที่ประกาศขึ้นมาโดยไม่ทำการระบุชื่อของฟังก์ชันในการเรียกใช้งาน สำหรับการประกาศฟังก์ชันโดยทั่วไปต้องระบุคีย์เวิร์ด def ไว้หน้าชื่อของฟังก์ชัน เช่น
def calculate_price:
แต่สำหรับฟังก์ชันแบบ anonymous นั้น จะระบุการประกาศฟังก์ชันโดยใช้คีย์เวิร์ด lambda แทน เราจึงสามารถเรียกฟังก์ชันแบบนี้ว่า lambda ฟังก์ชันได้เช่นเดียวกัน
โครงสร้างการใช้งาน anonymous ฟังก์ชัน
lambda <ตัวแปร1, ตัวแปร2 …>: <ประโยคคำสั่งของฟังก์ชัน>
การสร้างฟังก์ชัน anonymous(lambda ฟังก์ชัน)นี้ เราสามารถทำการกำหนดข้อมูลตัวแปรที่ส่งเข้าไปกี่ตัวก็ได้ขึ้นอยู่กับจุดประสงค์การทำงานของฟังก์ชันที่เราเขียนขึ้นมา แต่สามารถระบุ ประโยคคำสั่ง ได้แค่คำสั่ง(expression)เดียวเท่านั้น โดยโปรแกรมจะทำการประมวลผลข้อมูลที่ป้อนเข้าไปด้วยคำสั่งที่กำหนด แล้วจึงคืนผลลัพท์ออกมา
ตัวอย่างการใช้งานของฟังก์ชัน lambda
# สร้าง anonymous ฟังก์ชันสำหรับแปลงข้อมูลในหน่วยเซนติเมตร เป็นหน่วยฟุต
length_in_foot = lambda length_in_cm: length_in_cm * 0.032808
# กำหนดความยาวในหน่วยเซนติเมตร
length_in_cm = 30
# ใช้ฟังก์ชันที่กำหนดทำการแปลงข้อมูลในหน่วยเซนติเมตรเป็นหน่วยฟุต
length_in_foot = length_in_foot(length_in_cm)
print("ความยาว {} เซนติเมตร มีค่าเป็น {:.2f} ฟุต".format( length_in_cm, length_in_foot) )
# โปรแกรมทำการปรินต์ค่า
# ความยาว 30 เซนติเมตร มีค่าเป็น 0.98 ฟุต
โดยฟังก์ชันดังกล่าวจะทำการแปลงค่าความยาวจากหน่วยเซนติเมตรให้เป็นหน่วยฟุต โดยใช้ lambda ฟังก์ชันซึ่งจะรับค่าความยาวหน่วยเป็นเซนติเมตรแล้วทำการแปลงค่าให้เป็นหน่วยของฟุต ดังนี้
lambda length_cm: length_cm * 0.032808
เรามักจะใช้ฟังก์ชัน anonymous(lambda ฟังก์ชัน)เมื่อเราต้องการสร้างฟังก์ชันแบบไม่ต้องระบุชื่อ และต้องการใช้คำสั่งนั้นดำเนินการใดเพียงแค่ช่วงสั้นๆ เราอาจใช้ anonymous ฟังก์ชันนี้ ร่วมกันกับฟังก์ชันที่มีอยู่แล้วเช่น ฟังก์ชัน filter() หรือ map()
การใช้งาน anonymous ฟังก์ชันร่วมกับฟังก์ชัน filter()
ฟังก์ชัน filter จะรับข้อมูลเข้าไปประมวลผล 2 ตัว โดยตัวแรกเป็นฟังก์ชันสำหรับใช้ตรวจสอบ และตัวที่สองเป็นชุดข้อมูล โดยฟังก์ชัน filter จะนำข้อมูลแต่ละตัวในชุดข้อมูลมาส่งไปตรวจสอบโดยฟังก์ชันที่กำหนด แล้วทำการคืนค่าเป็นลิสต์ของข้อมูลใหม่ ซึ่งจะบรรจุข้อมูลที่ฟังก์ชันประมวลผลแล้วว่าเป็นจริงเท่านั้น โดยชุดข้อมูลใหม่อาจมีขนาดเท่ากันกับชุดข้อมูลที่ส่งเข้าไป หรือมีขนาดเล็กกว่าได้
การเรียกใช้งานฟังก์ชัน map
filter(<ฟังก์ชันที่จะใช้ประมวลผล>, <ชุดของข้อมูล>)
ตัวอย่างการใชังานฟังก์ชัน filter
# กำหนดลิสต์ข้อมูลจำนวนเต็มบวก
data_list = [0, 1, 2, 5, 8, 11, 12, 13, 14, 17, 20]
# ใช้งาน anonymous ฟังก์ชัน ร่วมกับการใช้งานฟังก์ชัน filter เพื่อเลือกเฉพาะข้อมูลที่เป็นจำนวนคู่ จากชุดข้อมูลที่กำหนด
even_list = list( filter( lambda x: (x%2 == 0), data_list ) )
print("ชุดข้อมูล {}".format(data_list))
print("ผลการตรวจสอบข้อมูลที่เป็นจำนวนคู่มีดังนี้")
for i in range(len(even_list)):
print( "จำนวนคู่: {}".format( even_list[i] ) )
# โปรแกรมทำการปรินต์ค่า
# ชุดข้อมูล [0, 1, 2, 5, 8, 11, 12, 13, 14, 17, 20]
# ผลการตรวจสอบข้อมูลที่เป็นจำนวนคู่มีดังนี้
# จำนวนคู่: 0
# จำนวนคู่: 2
# จำนวนคู่: 8
# จำนวนคู่: 12
# จำนวนคู่: 14
# จำนวนคู่: 20
การใช้งาน anonymous ฟังก์ชันร่วมกับฟังก์ชัน map()
ฟังก์ชัน map นั้นจะรับข้อมูล 2 ตัวเข้าไปประมวลผล ตัวแรกเป็นฟังก์ชันที่ใช้ดำเนินการ และตัวที่สองเป็นลิสต์ของข้อมูล จากนั้นจึงนำข้อมูลแต่ละตัวในลิสต์ไปประมวลผลโดยฟังก์ชันที่กำหนดแล้วจึงสร้างเป็นสิสต์ข้อมูลใหม่ซึ่งมีขนาดเท่ากับลิสต์ของของมูลที่ส่งเข้าไป แต่จะเป็นข้อมูลใหม่ที่เกิดดำเนินการจากฟังก์ชันที่กำหนดแล้ว
การเรียกใช้งานฟังก์ชัน map
map( <ฟังก์ชันที่จะใช้ประมวลผล>, <ชุดของข้อมูล>)
ตัวอย่างการใช้งาน
import math
# กำหนดลิสต์ข้อมูลของรัศมีวงกลม
radius_list = [1, 2, 5, 8, 11, 12, 14]
# ใช้งาน anonymous function ร่วมกับฟังก์ชัน map เพื่อทำการคำนวณหาพื้นที่ของวงกลมจากชุดข้อมูลรัศมีที่กำหนด
area_list = list( map( lambda radius: (math.pi * radius * radius), radius_list ) )
print("ผลการคำนวณหาพื้นที่ของวงกลมจากรัศมีที่กำหนด")
for i in range(len(radius_list)):
print("วงกลมที่มีรัศมี {} หน่วย มีพื้นที่ {:.2f} ตารางหน่วย".format(radius_list[i], area_list[i]))
# วงกลมที่มีรัศมี 1 หน่วย มีพื้นที่ 3.14 ตารางหน่วย
# วงกลมที่มีรัศมี 2 หน่วย มีพื้นที่ 12.57 ตารางหน่วย
# วงกลมที่มีรัศมี 5 หน่วย มีพื้นที่ 78.54 ตารางหน่วย
# วงกลมที่มีรัศมี 8 หน่วย มีพื้นที่ 201.06 ตารางหน่วย
# วงกลมที่มีรัศมี 11 หน่วย มีพื้นที่ 380.13 ตารางหน่วย
# วงกลมที่มีรัศมี 12 หน่วย มีพื้นที่ 452.39 ตารางหน่วย
# วงกลมที่มีรัศมี 14 หน่วย มีพื้นที่ 615.75 ตารางหน่วย
อ่านเพิ่มเติมเกี่ยวกับฟังก์ชัน filter: filter
อ่านเพิ่มเติมเกี่ยวกับฟังก์ชัน map: map
