Python的關鍵字lambad是定義匿名函數用的....什么是匿名函數?就是不需函數名的函數。和def有什么區(qū)別呢?
- python lambda會創(chuàng)建一個函數對象,但不會把這個函數對象賦給一個標識符,而def則會把函數對象賦值給一個變量。
- python lambda它只是一個表達式,而def則是一個語句。
先定義一個普通函數:
>>> def add(x):
return x*2
>>> add(1)
2
>>> add(5)
10
定義一個普通函數,主要作用就是將傳入的值乘以2并返回。現(xiàn)在來改成匿名函數
>>> lambda x: x*2
<function __main__.<lambda>>
上面的示例,僅僅是定義了一個匿名函數,語法是lambda 參數 : 操作
。
- 示例代碼中參數是一個,但是參數可以很多個
- 操作只有一條。x*2,不需要return會自己返回
還有一點,匿名函數創(chuàng)建好不會賦給參數,所以定義了之后需要使用,最好是傳給一個標示符參數,如下:
>>> lam = lambda x: x*x
>>> lam
<function __main__.<lambda>>
>>> lam(10)
100
>>> lam(4)
16
>>> lamadd = lambda x,y:x+y
>>> lamadd(1,2)
3
>>> lamadd(100,99)
199
lambda定義和使用
既然定義必須賦給一個變量才可以使用,匿名函數+標示符 類似于 def定義的函數,那匿名的存在有什么意義?
既然這里提到 lambda 匿名函數,就必須提及高階函數
高階函數
首先明確一點,匿名函數定義傳給一個變量,變量后面跟上括號并放入值,就可以得到函數操作,這就表明變量可以指向函數,這點很重要,理解這點之后,學習高階函數就會有比較清晰的思路
同樣的先來個示例學習一下什么叫高階函數:
>>> f2 = lambda x:x*x
>>> def newadd(x,y,f):
return f(x)+f(y)
>>> newadd(1, 2, f2)
5
>>> newadd( 3, 7, f2)
58
定義一個匿名函數并賦值給f2,并定義一個普通函數,參數是三個,x、y和一個 f 的函數。
由于前面提及的一個點:變量可以指向函數,所以f = f2 = lambda
-> f(x) = f2(2) = 2*2 = 4
高階函數的理解就是這樣【只可意會不可言傳】。理解這一點很重要,趁熱繼續(xù)學習python的內置高階函數
高階函數示例
Python內置高階函數
map函數
map()函數接收兩個參數,一個是函數名,另一個是可遍歷的對象【如列表、字符串】,返回一個map類型。示例代碼如下:
>>> ks1 = [1,2,3,4,5,6,7,8,9]
>>> ku = map(lambda x: x+1, ks1)
>>> type(ku)
map
>>> list(ku)
[2, 3, 4, 5, 6, 7, 8, 9, 10]
示例代碼中,可以直接使用匿名函數,簡潔明了
高階函數map
【高階函數未完】
更多Python3教程--傳送門