Python語言中的lambda函數,也就是匿名函數。lambda函數是Python中比較高級的用法,最近工做中有接觸到這個函數的使用,因此總結一下它的常見用法。python
能夠經過下面表達式來定義lambda函數,請在ipython中嘗試輸入下面語句:web
In [1]: func = lambda x: x * 2 In [2]: func(4) Out[2]: 8
上面定義的函數其實和下面經過def來定義函數的效果是同樣的:api
In [3]: def new_func(x): ...: return x * 2 In [4]: new_func(4) Out[4]: 8
不少狀況下,直接使用def來定義函數就能夠解決問題,可是lambda只須要單行就能夠定義一個簡單的函數,相比經過def來定義能夠少寫一些代碼。還有就是有些狀況下能夠直接使用lambda函數,並且不須要定義函數的名稱。lambda比較適合創建只在一個地方使用一次的簡單函數,def來建立的函數能夠比較複雜,並且適合在程序的多個地方調用。瀏覽器
主要有下面兩種使用場景:app
在selenium和appium自動化測試中,常常會碰到要等待頁面元素加載的狀況。selenium的api中有提供一個WebDriverWait方法。 經過下面代碼可使用selenium提供的等待頁面元素加載方法,其中使用到了lambda函數。函數
from selenium.webdriver.support.wait import WebDriverWait --略-- # 使用selenium提供的WebDriverWait方法,每0.5秒檢查一次定位的元素,超時設置是2秒 WebDriverWait(browser, 2).until( lambda driver: driver.find_element_by_id('login')) #使用lambda函數來查找特定的元素
上面的代碼不是完整的代碼,其中省略了定義瀏覽器驅動等語句。在上面中lambda定義一個簡單的函數,來使用selenium的查找元素方法去找特定的元素,若是能找到這個元素的話返回True不然返回False。測試
在數據分析中,常常會有對列表元素進行排序的需求, 可使用lambda函數來自定義排序的方法。請查看下面的例子: 下面例子中使用列表的排序方法並結合lambda函數來進行特殊的排序。請在ipython中輸入下面語句:code
In [20]: numbers = [3, 2, 1, 4, 7, 0, -1, -4] In [21]: numbers.sort(key=lambda x: abs(5-x)) In [22]: numbers Out[22]: [4, 3, 7, 2, 1, 0, -1, -4]
上面代碼中經過lambda函數實現了特殊條件的排序,先用5減列表中的每一個數字後,最後取絕對值後再來排序。排序
參考:ip
《利用Python進行數據分析》 Wes McKinney 著 http://stackoverflow.com/questions/890128/why-are-python-lambdas-usefulz