lambda 函數是一個簡短的匿名函數,這裏介紹它的經典用法。
語法
lambda 語法: lambda 參數列表(支持多個參數):計算表達式
lambda x,y,z:x+y+z
經典用法
- filter() 方法藉助於一個函數來過濾給定的序列,該函數測試序列中的每個元素是否爲真。
- 基礎語法:filter(fun, iterable)
- 參數:fun 測試 iterable 序列中的每個元素執行結果是否爲 True,iterable 爲被過濾的可迭代序列
- 返回值:filter object
def is_upper(c):
# 字母爲大寫時爲 True
return ord(c)<ord('a')
# 因爲 filter 返回的是一個 filter object,所以輸出的時候需要用 list 進行轉換
print(list(filter(is_upper, 'AbCdEfG')))
## 輸出結果: ['A', 'C', 'E', 'G']
-
filter with lambda:
print(list(filter(lambda x:ord(x)<ord('a'), 'AbCdEfG')))
-
map() 函數的主要作用是可以把一個方法依次執行在一個可迭代的序列上,比如 List 等。
- 基礎語法:map(fun, iterable)
- 參數:fun 依次處理 iterable 中的所有元素,iterable 爲被過濾的可迭代序列
- 返回值:map object
def roll(c):
# 字符加 1, a 變 b
return chr(ord(c)+1)
# 因爲 filter 返回的是一個 map object,所以輸出的時候需要用 list 進行轉換
print(list(map(roll, 'abcdef')))
## 輸出結果: ['b', 'c', 'd', 'e', 'f', 'g']
-
map with lambda:
print(list(map(lambda x:chr(ord(x)+1), 'abcdef')))
-
reduce() 函數用於在列表(可迭代序列)上執行某些計算並返回結果,它將滾動計算列表中的所有元素,並得出統計結果。
- 基礎語法:reduce(fun, iterable)
- 參數:fun 有兩個參數,一個對應於 iterable 每一個元素的方法,另一個爲上一次執行的結果,iterable 爲被過濾的可迭代序列
- 返回值:最終的 fun 的返回結果
- Python3 中 reduce 不在作爲保留字,該函數轉移到了 包中
from functools import reduce
def sum(x,y):
return x+y
print(reduce(sum, [1, 2, 3, 4]))
- reduce with lambda:
print(reduce((lambda x,y:x+y), [1, 2, 3, 4]))
錯誤的例子
不要在賦值語句中使用lambda
,相比較於顯式的def語句,lambda
的唯一優勢是能鑲嵌在一個很長的表達式裏,而不是用來代替 def。
# 推薦的寫法:
def f(x): return 2*x
# 不推薦的寫法:
f = lambda x: 2*x