Python 函數式編程 (3) — reduce

今天來教第三個函數式編程囉~總共會有三個,大家可以試著在未來寫程式的時候r盡量嘗試這四種寫法,程式除了變得簡潔、可讀性高之外,也能大大提升程式的執行效率喔!

reduce
主要是用來計算遞迴的數列,我們先來看看傳統上如果不使用reduce
的話要怎麼寫呢?

  • 傳統遞迴寫法:
    程式像下面這樣寫喔~

    a = 0
    for i in range(1,11):
        a = a + i
    print(a)

    先解釋一下range(1,11),如下面程式所執行的,利用range我們可以產生一組物件其中(1,11)代表從1開始一路生成到11。

    所以下面這段程式碼就代表會進行 i 從 1 到 10 的進行迴圈,就是a = a + i這段程式碼會執行10次。第一次的時候因為一開始的宣告a = 0所以第一次進入迴圈 a + i = 1,第二次迴圈時,i 變成 2,而 a 因為上一輪的關係,已經變成 1 ,所以 a + i = 1 + 2 … 依此類推,最後就會等於 55 (其實白話一點說就從 1 一路加到 10)。

  • reduce  的寫法:
    那如果使用reduce 的寫法呢?程式碼會長的像下面這樣,另外一點要注意的是從Python 3.x 後 reduce 函數被放到 functools 這個模組中,所以別忘記要做 import 的動作喔~

    from functools import reduce
    a = reduce(lambda x,y : x+y, range(1,11) )
    print(a)

    一樣使用lambda但是這邊的第一次 x = 1,y = 2 第二次的 x 則會用上次計算的結果帶入,所以第二次 x = 2 ,y = 3 ,第三次則是  x = 5 ,y = 4 … 最後計算完的結果 a 會一樣等於 55。

這篇看完要記得掌握兩個重點 ~第一點是要知道”遞迴”是什麼,這個觀念在整個程式語言中很常見也很重要,所以大家至少一定要看的懂;第二點是要會利用reduce  的寫法,如果可以常常使用的話,coding的功力會更上一層樓喔~~

 

Facebook Comments

發表迴響