從大二開始研究怎麼當一名駭客之後,開始接觸Python, 出社會後也常常用Python 開發我個人的工具包,可說是這幾年來個人 Python 的功力大漲!

最近在邊寫邊查資料的過程當中,認識到Python的 Lambda,Map和Reduce

於是,就讓我寫一篇文章記錄這一切吧 ^^

Lambda

此 Lambda 不是 AWS的Lambda ,我也不知道為什麼這裡要取和AWS的Lambda一樣的名稱哈哈,總之他是一種Python裡面的表示式,可以更加簡便、更加Function programming 的呈現程式碼,不多贅述,我最喜歡 Show me the code了!

1
2
3
4
5
# 通常我們定義Function是長這個樣子(順便我也想練習強型別,Python也支援喔)
def demoX(x:int) -> int:
    return x + 10;
    
print(demoX(20)) //output-> 30

其實蠻落落長的,所以Python說,要有Lambda , 就有Lambda

1
2
3
demoX = lambda x: x+10

print(demoX(20))

好了,我附上參考網址結束這一切:

Map和Reduce

Map , FilterReduce 我想要放在一起說,如果常寫Function Programming的對這兩個單字一定不陌生,Laravel的Collection也有這些方法。沒錯,他們的用法其實和他們的單字意思很像呢!

1
2
3
# 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才能把它印出來喔

1
2
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,這我就不多說明啦~

1
2
3
4
from functools import reduce

a = reduce(lambda a,b: a+b,[1,2,3])
print(a) # 6

至於 reduce需要先 import 喔,只要有一個有兩個參數的function , 他就會迭代這清單的項目做出最後的結果

參考網址:

小君曰:Python也能Function Programming !