lambda:一個語法,三個特性,四個用法html
語法:
lambda argument_list: expression
argument_list 和 expression 由用戶自定義python
(1)argument_list 是參數列表。它的結構與 python 中函數的參數列表是同樣的。express
a, b a=1, b=2 *args **kwargs a, b=1, *args 空 ……
(2)expression 是一個關於參數的表達式。表達式中出現的參數須要在 argument_list 中定義,而且表達式只能是單行的,以下:編程
1 None a + b sum(a) 1 if a > 10 else 0
lambda argument_list: expression 表示的是一個函數,一個匿名函數。函數式編程
三個特性:
(1)lambda 函數是匿名的;所謂匿名函數,通俗地說就是沒有名字的函數。lambda 函數沒有名字;
(2)lambda 函數有輸入和輸出;輸入是傳入到參數列表 argument_list 的值,輸出是根據表達式 expression 計算獲得的值;
(3)lambda 函數通常功能簡單,單行 expression 決定了 lambda 函數不可能完成複雜的邏輯,只能完成很是簡單的功能函數
四個用法:
(1)將 lambda 函數賦值給一個變量,經過這個變量間接調用該 lambda 函數
(2)將 lambda 函數做爲其餘函數的返回值,返回給調用者
(3)將 lambda 函數做爲參數傳遞給其餘函數
(4)將lambda 函數賦值給其餘函數,從而將其餘函數用該 lambda 函數替換spa
python編程方式
python 編程方式分爲:
(1)面向過程
(2)函數式編程
不用變量保存狀態,不修改變量
函數即變量
(3)面向對象code
(1)函數接收參數是一個函數名
(2)返回值中包含函數
把函數做爲參數傳入,這樣的函數稱爲高階函數htm
(1)map對象
map函數接收兩個參數,一個是函數,一個是 iterable。map將傳入的函數依次做用到每一個元素,並把結果做爲新的 iterator 返回
def f(x): return x * x m = map(f, [1, 2, 3, 4]) # iterator 是惰性序列,所以經過 list() 函數讓它把整個序列都計算出來並返回一個list print(list(m)) # 執行結果: # [1, 4, 9, 16]
(2)filter
filter接收一個函數和一個序列。filter() 把傳入的函數依次做用於每一個元素,而後根據返回值是 True 和 False 決定保留仍是丟棄該元素。
def is_odd(n): return n % 2 == 1 # f = filter(is_odd, [1,2,3,4,5,6,7]) # 等價於 f = filter(lambda n: n % 2 == 1, [1,2,3,4,5,6,7]) print(list(f)) # 執行結果: # [1, 3, 5, 7]
(3)reduce
reduce 把一個函數做用於一個序列上,這個函數必須接收兩個參數,reduce把結果繼續和下一個元素作累計計算
from functools import reduce def foo(x, y): return x + y # r = reduce(foo, [1,2,3,4]) # 等價於: r = reduce(lambda x, y: x + y, [1,2,3,4]) print(r)