def multiply_2(list): for index in range(0, len(list)): list[index] *= 2 return list需要注意的是,這段程式碼不是一個純函數的形式,因為列表中元素的值被改變了,如果多次呼叫 multiply_2() 函數,那麼每次得到的結果都不一樣。
def multiply_2_pure(list): new_list = [] for item in list: new_list.append(item * 2) return new_list
注意,純粹的函數語言程式設計語言(比如 Scala),其編寫的函數中是沒有變數的,因此可以保證,只要輸入是確定的,輸出就是確定的;而允許使用變數的程式設計語言,由於函數內部的變數狀態不確定,同樣的輸入,可能得到不同的輸出。函數語言程式設計的優點,主要在於其純函數和不可變的特性使程式更加健壯,易於偵錯和測試;缺點主要在於限制多,難寫。
map(function, iterable)
其中,function 參數列示要傳入一個函數,其可以是內建函數、自定義函數或者 lambda 匿名函數;iterable 表示一個或多個可疊代物件,可以是列表、字串等。【例 1】還是對列表中的每個元素乘以 2。注意,該函數返回的是一個 map 物件,不能直接輸出,可以通過 for 迴圈或者 list() 函數來顯示。
listDemo = [1, 2, 3, 4, 5] new_list = map(lambda x: x * 2, listDemo) print(list(new_list))執行結果為:
[2, 4, 6, 8, 10]
listDemo1 = [1, 2, 3, 4, 5] listDemo2 = [3, 4, 5, 6, 7] new_list = map(lambda x,y: x + y, listDemo1,listDemo2) print(list(new_list))執行結果為:
[4, 6, 8, 10, 12]
注意,由於 map() 函數是直接由用 C 語言寫的,執行時不需要通過 Python 直譯器間接呼叫,並且內部做了諸多優化,所以相比其他方法,此方法的執行效率最高。filter(function, iterable)
此格式中,funcition 參數列示要傳入一個函數,iterable 表示一個可疊代物件。listDemo = [1, 2, 3, 4, 5] new_list = filter(lambda x: x % 2 == 0, listDemo) print(list(new_list))執行結果為:
[2, 4]
listDemo = [1, 2, 3, 4, 5] new_list = map(lambda x,y: x-y>0,[3,5,6],[1,5,8] ) print(list(new_list))執行結果為:
[True, False, False]
reduce(function, iterable)
其中,function 規定必須是一個包含 2 個引數的函數;iterable 表示可疊代物件。import functools listDemo = [1, 2, 3, 4, 5] product = functools.reduce(lambda x, y: x * y, listDemo) print(product)執行結果為:
120