Map() 與 lambda 函式
到目前為止,你已經用過 lambda 函式來撰寫簡短、單純的函式,也用它來重新定義具備簡單功能的函式。不過,lambda 函式最好的使用情境,是把這些簡單功能匿名地嵌入在較大的運算式裡。也就是說,與用 def 定義的函式不同,這些功能不會儲存在環境中。為了更清楚這個概念,你將在 map() 的情境中使用 lambda 函式。
回想影片中提到,map() 會將某個函式套用到一個物件上,例如串列。在這裡,你可以用 lambda 函式來定義 map() 用於處理該物件的函式。例如:
nums = [2, 4, 6, 8, 10]
result = map(lambda a: a ** 2, nums)
你可以看到,將數值 a 提升到 2 次方的 lambda 函式,與數字串列 nums 一起被傳入 map()。這次呼叫 map() 產生的「map 物件」被儲存在 result。接下來你會練習把 lambda 函式和 map() 搭配使用。在這題中,你會把先前練習中定義的 add_bangs() 函式的功能,套用到一個字串串列上。
本練習屬於課程
Python 函式入門
練習說明
- 在
map()的呼叫中,傳入一個會把字串'!!!'接在字串item後面的 lambda 函式;同時傳入字串串列spells。將得到的 map 物件指定給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)