python語言中lambda函數的使用方法

lambda簡介

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

爲何要使用lambda函數

不少狀況下,直接使用def來定義函數就能夠解決問題,可是lambda只須要單行就能夠定義一個簡單的函數,相比經過def來定義能夠少寫一些代碼。還有就是有些狀況下能夠直接使用lambda函數,並且不須要定義函數的名稱。lambda比較適合創建只在一個地方使用一次的簡單函數,def來建立的函數能夠比較複雜,並且適合在程序的多個地方調用。瀏覽器

常見的使用場景

主要有下面兩種使用場景:app

selenium和appium自動化測試

在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

相關文章
相關標籤/搜索