談Python: Lambda, Map , Filter 及 Reduce
· 2 min read
從大二開始研究怎麼當一名駭客之後,開始接觸Python, 出社會後也常常用Python 開發我個人的工具包,可說是這幾年來個人 Python 的功力大漲!
最近在邊寫邊查資料的過程當中,認識到Python的 Lambda,Map和Reduce
於是,就讓我寫一篇文章記錄這一切吧 ^^
此 Lambda 不是 AWS的Lambda ,我也不知道為什麼這裡要取和AWS的Lambda一樣的名稱哈哈,總之他是一種Python裡面的表示式,可以更加簡便、更加Function programming 的呈現程式碼,不多贅述,我最喜歡 Show me the code了!
# 通常我們定義Function是長這個樣子(順便我也想練習強型別,Python也支援喔)
def demoX(x:int) -> int:
return x + 10;
print(demoX(20)) //output-> 30
其實蠻落落長的,所以Python說,要有Lambda , 就有Lambda
demoX = lambda x: x+10
print(demoX(20))
好了,我附上參考網址結束這一切:
Map和Reduce
Map
, Filter
和 Reduce
我想要放在一起說,如果常寫Function Programming的對這兩個單字一定不陌生,Laravel的Collection
也有這些方法。沒錯,他們的用法其實和他們的單字意思很像呢!
# map(function_to_apply, list_of_inputs)
a = list(map(lambda a: a+2,[1,2,3]))
print(a) # [3,4,5]
map
其實就會迭代列表中的每一個項目,最後回傳出來的是一個map
的物件,記得之後要用list
才能把它印出來喔
a = list(filter(lambda a: a>2,[1,2,3,4,5,6]))
print(a) # [3, 4, 5, 6]
filter
其實和map
很像,只是它是過濾項目,一樣他是個filter
的物件,一樣需要list
,所以你的function裡面請回傳出boolean
,這我就不多說明啦~
from functools import reduce
a = reduce(lambda a,b: a+b,[1,2,3])
print(a) # 6
至於 reduce
需要先 import
喔,只要有一個有兩個參數的function , 他就會迭代這清單的項目做出最後的結果
參考網址:
小君曰:Python也能Function Programming !