天天看點

python Lambda 表達式

一、lambda函數

1、lambda函數基礎:

lambda函數也叫匿名函數,即,函數沒有具體的名稱,而用def建立的方法是有名稱的。如下:

上面的隻是簡單的用lambda建立一個函數對象,并沒有儲存它也沒有調用它,時刻會被回收了。這裡我們儲存并調用:

從上面幾個例子中,可易了解python lambda文法:

lambda語句中,冒号前是參數,可以有多個,用逗号隔開,冒号右邊的傳回值。lambda語句建構的其實是一個函數對象。

2、無參數

如果沒有參數,則lambda冒号前面就沒有,如以上例子。

3、有參數

二、lambda與def

上面的例子中,可知lambda函數隻是建立簡單的函數對象,是一個函數的單行版本,但是這種語句由于性能的原因,調用的時候繞過函數的棧配置設定。python lambda還有哪些和def不一樣呢?

def與lambda的差別 : 它們的主要不同點是python def 是語句而python lambda是表達式 ,了解這點對你了解它們很重要。

使用lambda函數還有一些注意事項:  lambda 函數可以接收任意多個參數 (包括可選參數) 并且傳回單個表達式的值。  lambda 函數不能包含指令,包含的表達式不能超過一個。

1 、python lambda會建立一個函數對象,但不會把這個函數對象賦給一個辨別符,而def則會把函數對象指派給一個變量。

2、python lambda它隻是一個表達式,而def則是一個語句。lambda表達式運作起來像一個函數,當被調用時建立一個架構對象。

三、lambda函數的用途

個人認為有以下:

1、對于單行函數,使用lambda可以省去定義函數的過程,讓代碼更加精簡。

2、在非多次調用的函數的情況下,lambda表達式即用既得,提高性能

注意:如果for..in..if能做的,最好不要選擇lambda

四、參考

http://www.cnblogs.com/coderzh/archive/2010/04/30/python-cookbook-lambda.html

http://www.cnblogs.com/wanpython/archive/2010/11/01/1865919.html

lambda表達式是起到一個函數速寫的作用。允許在代碼内嵌入一個函數的定義。

如上所示,使用lambda表達式定義了一個匿名函數,用于篩選100以内的3的倍數,并生成一個清單。

當然lambda也可以嵌套在一個函數内使用,如上,函數中嵌套了一個lambda表達式。

然後,要使用的時候可以用一個變量來接收,顯示double變量,double變量是一個函數,并且需要一個參數,參見lambda表達式,需要一個s參數。

最後,調用double變量,并且傳入參數 8 ,得到傳回值16。因為前面傳入的n的值為 2 ,故 2 * 8 得到16。

内置bif介紹:

filter():簡單的了解為過濾器,需要兩個參數,function,和一個序列(字元串、清單、元組都是序列),過濾器會依次将序列的值傳入function中,

    如果傳回true的話,将其重新生成一個清單傳回。

filter() 函數建立了一個疊代器,是以如果你想得到一個清單的話,就得像示例那樣使. 用 list() 去轉換。

zip():字面意思了解,就是zip打包,可以将多個序列進行打包,它會将序列拆分,然後把第一個序列和第二個序列的元素依次組成元組,2個一組組合成清單。

    不過要注意的是,這是以最短序列來組合的,就是說如果一個序列比較長,一個比較短的話,組合隻會進行到斷序列的最後一個元素,多餘的部分會被抛棄。

map():映射,用法和filter()類似,也是将序列放入函數進行運算,但是,不論運算結果為什麼,map()都将忠實回報,這是map()和filter()的主要差別。請注意,filter()和map()中的function都必要有一個傳回值。

我比較認同電影《教父》裡的人生觀: 第一步要努力實作自我價值,第二步要全力照顧好家人,第三步要盡可能幫助善良的人,第四步為族群發聲,第五步為國家争榮譽。 事實上作為男人,前兩步成功,人生已算得上圓滿,做到第三步堪稱偉大,而随意颠倒次序的那些人,一般不值得信任。

def saver(x=[]): x.append(1) print x saver([2]) saver() saver() saver()