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