關於lambda

轉載自:http://www.cnblogs.com/BeginMan/p/3178103.html


一、lambda函數

1、lambda函數基礎:

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

"""命名的foo函數"""
def foo():return 'beginman'  #Python中單行參數可以和標題寫在一行
"""lambda關鍵字創建匿名函數,該表達式同以上函數"""
lambda:'beginman'             

上面的只是簡單的用lambda創建一個函數對象,並沒有保存它也沒有調用它,時刻會被回收了。這裏我們保存並調用:

bar = lambda:'beginman'
print bar()      #beginman

從上面幾個例子中,可易理解Python lambda語法:

lambda [arg1[,arg2,arg3....argN]]:expression

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

print lambda:'beginman'   #<function <lambda> at 0x00B00A30>

2、無參數

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

3、有參數

按 Ctrl+C 複製代碼
按 Ctrl+C 複製代碼

二、lambda與def

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

1 、python lambda會創建一個函數對象,但不會把這個函數對象賦給一個標識符,而def則會把函數對象賦值給一個變量。

如:

>>> def foo():return 'foo()'
>>> foo
<function foo at 0x011A34F0>

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章