Map() และ Lambda Functions
จนถึงตอนนี้ ได้ใช้ lambda functions ในการเขียนฟังก์ชันสั้นๆ และง่ายๆ รวมถึงนำไปกำหนดฟังก์ชันที่มีการทำงานแบบเรียบง่ายอีกด้วย อย่างไรก็ตาม กรณีที่เหมาะสมที่สุดสำหรับ lambda functions คือเมื่อต้องการฝังการทำงานแบบเรียบง่ายเหล่านั้นไว้ในนิพจน์ขนาดใหญ่โดยไม่มีชื่อ (anonymous) ซึ่งหมายความว่าการทำงานดังกล่าวจะไม่ถูกจัดเก็บไว้ใน environment ต่างจากฟังก์ชันที่นิยามด้วย def เพื่อให้เข้าใจแนวคิดนี้ได้ดียิ่งขึ้น จะได้ใช้ lambda function ร่วมกับฟังก์ชัน map()
จากที่เรียนในวิดีโอ map() จะนำฟังก์ชันไปใช้กับอ็อบเจกต์ เช่น ลิสต์ โดยสามารถใช้ lambda functions เพื่อกำหนดฟังก์ชันที่ map() จะใช้ประมวลผลอ็อบเจกต์นั้นได้ ตัวอย่างเช่น:
nums = [2, 4, 6, 8, 10]
result = map(lambda a: a ** 2, nums)
จากตัวอย่างนี้จะเห็นว่า lambda function ที่ยกค่า a กำลัง 2 ถูกส่งเข้าไปใน map() พร้อมกับลิสต์ตัวเลข nums และ map object ที่ได้จากการเรียก map() จะถูกเก็บไว้ในตัวแปร result ตอนนี้จะได้ฝึกใช้ lambda functions ร่วมกับ map() โดยในแบบฝึกหัดนี้ จะนำการทำงานของฟังก์ชัน add_bangs() ที่นิยามไว้ในแบบฝึกหัดก่อนหน้าไปใช้กับลิสต์ของสตริง
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Python เบื้องต้น: การเขียนฟังก์ชัน
คำแนะนำการฝึกหัด
- ในการเรียก
map()ให้ส่ง lambda function ที่ต่อสตริง'!!!'เข้ากับสตริงitemและส่งลิสต์ของสตริงspellsเข้าไปด้วย จากนั้นกำหนดผลลัพธ์ที่เป็น map object ให้กับตัวแปรshout_spells - แปลง
shout_spellsให้เป็นลิสต์ แล้วพิมพ์ลิสต์ดังกล่าวออกมา
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Create a list of strings: spells
spells = ["protego", "accio", "expecto patronum", "legilimens"]
# Use map() to apply a lambda function over spells: shout_spells
____ = map(____, ____)
# Convert shout_spells to a list: shout_spells_list
____
# Print the result
print(shout_spells_list)