lambda
2018-09-25 本文已影响0人
超人不会飞_9664
lambda简单来说就是可以一行代码定义一个函数,使代码更加简洁舒服。
. 对于那些抽象的并且整个程序执行下来调用一两次的函数,有时候给函数起个名字也是比较头痛的问题,使用lambda就不需要考虑命名的问题了
既然提到lambda,就顺便介绍两个牛逼的BIF
filter()
filter(function or None,iterable) ,如果第一个参数是函数,那么filter会把interable全部迭代一遍,如果结果为True,就筛选出来,
a = list(filter(lambda n: not(n % 3),range(1,100)))
执行结果
a
[3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]
看到这里是不是觉得用列表推导式也可以呢,那试一下
a = [n for n in range(1,100) if n % 3 == 0]
执行结果
>>> a
[3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]
上面是一个参数是函数时的表达,那要是None呢!再举个栗子
filter(None,[1,0,False,True])
a = list(filter(None,[1,0,False,True]))
执行结果
>>> a
[1, True]
可以看出,第一个参数有函数在时,就是将iterable放到函数里然后删选出True的值,再返回对应的iterable的值,如果是None就直接删选满足True里的iterable值
map()
也是两个参数,一个函数,一个可迭代对象/也可以有多个可迭代对象
a = list(map(lambda x: x*2,range(10)))
执行结果
>>> a
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
前面也说了map可以有多个可迭代对象
a= list(map(lambda x,y:[x,y],[1,3,5,7,9],[2,4,6,8,10]))
执行结果
>>> a
[[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
可以看出根据函数对制定序列做映射