lambda定義匿名函數

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教程--傳送門

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容