lambda
python使用lambda表达式来创建匿名函数,所谓匿名函数就是没有名字的函数,就是在创建函数时,不用提供函数的名称,先来看看lambda的用法和匿名函数与普通函数的区别。
我们先来举一个普通函数的例子:
def ds(x):
return 2 * x - 1
ds(5)
那如果使用lambda表达式会变成什么样子呢?
g = lambda x: 2 * x - 1
g(5)
Python的lambda表达式语法非常精简(符合python风格),基本语法是在冒号(:)左边放原函数的参数,可以有多个参数,用(,)隔开即可,冒号的右边是返回值。
我们来看看有多个参数是的lambda写法
先看一下普通函数写法:
def add(x, y):
return x + y
add(3, 4)
转换为lambda写法:
g = lambda x, y: x + y
g(3, 4)
lambda表达式的作用:
(1): Python写一些执行脚本时,使用lambda就可以省下定义函数过程,比如说只是需要写一个简单的脚本来管理服务器时,就不需要专门定义一个函数然后再写调用,使用lambda就可以使得代码更加精简。
(2):对于一些比较抽象并且整个程序执行下来只需要调用一两次的函数,有时候给函数起个名字是个非常头疼的问题,使用lambda就不需要考虑命名的问题了。
(3):简化代码的可读性,由于阅读普通函数经常要跳到开头def定义的位置,使用lambda函数可以省去这样的步骤。
两个实用的BIF:filter()和map()
1、filter()
filter()函数是一个过滤器,过滤器的作用就是将想要的东西留下,将不想要的东西过滤掉,python应该如何实现过滤器功能呢,我们先来看一下filter()函数的官方解释:
大概的意思就是:filter有两个参数,第一个参数可以是一个函数也可以是None,如果是一个函数的话,则将第二个可迭代数据里的每一个元素作为函数的参数进行计算,把返回的True值筛选出来,如果第一个参数为None,则直接将第二个参数中为True的值筛选出来。
举几个例子:
写一个过滤奇数的例子:
**
def odd(x):
return x % 2
temp = filter(odd, range(10))
list(temp)
**
这个肯定比使用for循环与if语句写出来的代码简洁多了
进一步优化,我们可以将filter与之前的lambda表达式结合起来实现奇数过滤功能:
**
list(filter(lambda x: x % 2, range(10)))
**
2、map()
map在这里不是地图的意思,在编程领域,map一般作“映射”来解释,map()这个内置函数也有两个参数,仍然是一个函数和一个可迭代序列,将序列的每一个元素作为函数的参数进行加工,知道可迭代序列每个元素都加工完毕,返回所有加工后的元素构成的新序列。
我们用map()函数来计算一下10以内所有整数的平方值
**
list(map(lambda x: x * x,range(11)))
**