python入門基礎之lambda匿名函數詳解
剛開始學習python的時候很多人可能對於lambda函數不了解,感覺和def很混亂,下面我來介紹一下lambda函數
我從一下幾個方面來介紹lambda:
1、lambda簡介
2、lambda與def不同之處
3、lambda的使用方法
1、lambda簡介
先來看一段代碼示例:
第一行是lambda聲明,x,y相當於傳入的參數,整個函數會返回x+y的值。lambda作為一個表達式,定義了一個匿名函數,上例的代碼x,y為入口參數,x+y為函數體。在這裡lambda簡化了函數定義的書寫形式。
python允許用lambda關鍵字創造匿名函數。匿名是不需要以標準的方式來聲明,比如說使用 def 語句。(除非賦值給一個局部變量,這樣的對象也不會在任何的名字空間內創建名字,上面的例子中會創建名字。)
作為函數,它們也能有參數。一個完整的 lambda"語句"代表了一個表達式,這個表達式的定義體必須和聲明放在同一行。語法如下:
lambda [arg1[, arg2, ... argN]]: expression
參數是可選的,如果使用的參數話,參數通常也是表達式的一部分
2、lambda匿名函數與def區別
lambda 和def它兩個的基本用法差不多,參數都是可選,也都會返回對象
如下:
不同之處:
lambda可以定義一個匿名函數,而def定義的函數必須有一個名字。這應該是lambda與def兩者最大的區別。
lambda是一個表達式,而不是一個語句(lambda is an expression, not a statement.)因此,lambda能夠出現在Python語法不允許def出現的地方——例如,在一個列表常量中或者函數調用的參數中。
lambda的主體是一個單個的表達式,而不是一個代碼塊。(lambda's body is a single expression, not a block of statements.),lambda裡面的語句相當於def中return中的代碼一樣。只能是簡單的表達式,所以說lambda的能力小於def,在lambda中只能使用簡單的語法,不能使用if else while return等語句
它的設計理念為:lambda是一個為編寫簡單的函數而設計的,而def用來處理更大的任務。(lambda is designed for coding simple functions, and def handles larger tasks.)
3、lambda的使用
為什麼要使用lambda?
1、lambda函數主要用來寫一些小體量的一次性函數,避免汙染環境,同時也能簡化代碼。
2、lambda起到了一種函數速寫的作用,允許在使用的代碼內嵌入一個函數的定義。他們完全是可選的(你總是能夠使用def來替代它們),但是你僅需要嵌入小段可執行代碼的情況下它們會帶來一個更簡潔的代碼結構。
例如:
map( lambda x: x*x, [y for y in range(10)] )
這個寫法要好過
def sq(x):
return x * x
map(sq, [y for y in range(10)])
3、lambda使用可以加參數也可以不加參數
有參數就如同上面的用法
無參數:
4、lambda通常用來編寫跳轉表(jump table),也就是行為的列表或字典,能夠按照需要執行相應的動作。如下段代碼所示。
總結:
1、lambda只是一個表達式,函數體比def簡單很多
2、lambda的主體是一個表達式,而不是一個代碼塊。僅僅能在lambda表達式中封裝有限的邏輯進去
3、lambda函數擁有自己的名字空間,且不能訪問自有參數列表之外或全局名字空間裡的參數
4、 簡單單行代碼或者一次性的函數可以用lambda函數來書寫,可以讓代碼更簡潔。
5、 對於複雜函數或者函數體體量大的函數,最好不要用lambda函數,會增加代碼的閱讀難度,使代碼晦澀難懂。
6、 在非多次調用的函數的情況下,lambda表達式即用既得,提高性能
碼字不易,多多關照