lambda argument1, argument2,... argumentN : expression square = lambda x: x**2 print(square(2))
l = [(lambda x:x**2) (x) for x in range(10)] print(list(l)) [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
l = [(1, 20), (3, 0), (9, 10), (2, -1)] l.sort(key=lambda x: x[1]) # 按列表中元祖的第二個元素排序 print(l) 輸出 [(2, -1), (3, 0), (9, 10), (1, 20)]
squared = map(lambda x: x**2, [1, 2, 3, 4, 5]) print(list(squared))
上面那段代碼,若是不用lambda表達式而用常規函數:express
def squared2(x): return x[1] if isinstance(x,tuple) else x**2 squared = map(squared2, [1, 2, 3, 4, 5,(1,3)]) print(list(squared))
Python函數式編程有三個基本函數 map()、reduce()、filter()編程
map遍歷可迭代對象取出元素,做爲參數依次傳給function函數,例:每一個元素都變大2倍函數式編程
l = [1, 2, 3, 4, 5] new_list = map(lambda x: x * 2, l) # [2, 4, 6, 8, 10]
filter與map同樣,遍歷可迭代對象,並依次傳給function,不一樣的是,filter會判斷每次function的結果是True或False,並將結果爲True的元素組成列表返回函數
例:返回一個列表中的全部偶數spa
l = [1, 2, 3, 4, 5] new_list = filter(lambda x: x % 2 == 0, l) # [2, 4]
其中function 是一個函數對象,規定它有兩個參數,表示對 iterable 中的每一個元素以及上一次調用後的結果,運用 function 進行計算,因此最後返回的是一個單獨的數值。code
配合reduce源碼理解:對象
def reduce(function, iterable, initializer=None): it = iter(iterable) if initializer is None: try: initializer = next(it) except StopIteration: raise TypeError('reduce() of empty sequence with no initial value') accum_value = initializer for x in it: accum_value = function(accum_value, x) return accum_value
例 累加列表中的元素blog
from functools import reduce l = [1,2,3,4,5] result = reduce(lambda x,y:x+y, l ) print(result) #15 result = reduce(lambda x,y:x+y, l,10 ) print(result) #25
把字典 d = {'mike': 10, 'lucy': 2, 'ben': 30} 按值從高到低排序排序
d = {'mike': 10, 'lucy': 2, 'ben': 30} d = sorted(d.items(), key=lambda x: x[1],reverse = True ) #[('ben', 30), ('mike', 10), ('lucy', 2)] d = dict(d) print(d)
參考:源碼
極客時間《Python核心技術與實戰》