假设有这样一个问题:
def division_list(lis_0,lis1=[],lis2=[]):
for i in lis_0:
if i % 2 == 0:
lis1.append(i)
else:
lis2.append(i)
return lis1,lis2
定义好函数,只需要将a作为参数传入即可。输出的结果就是:([2, 4, 6], [1, 3, 5])。
如果使用lambda应该如何书写?函数名 = lambda<参数> : 表达式
b = list(filter(lambda i : i%2==0, a))
c = list(filter(lambda i : i%2==1, a))
print(b,c)
filter(function, iterable)函数大家肯定都会用,这个函数的功能就是将列表、字典等可迭代对象中的元素一一取出,然后对其进行处理,处理的方法可以是自定义的函数。那么这里自定义的函数就是匿名函数lanbda。
lambda最简单的理解就是可以看成return,i%2==0,return i。(这种理解是较为片面的)这样是不是就更好理解了呢?
再看一个新的例题:
使用一个匿名函数,使列表中小于 10 的元素全部剔除。
输入:
list_0 = [-1, 42, 66, 3, -32, 100, 5]
输出:
[42, 66, 100]
按照我们上面的理解,将lambda看做return:
i >=10,return i ------->lambda i : i >= 10
list_0 = [-1, 42, 66, 3, -32, 100, 5]
list_1 = list(filter(lambda i : i >= 10,list_0))
print(list_1)
如果只有一个参数,这样看是没问题的,但理解上其实也是片面的。
但是当lambda传入多个参数时,将其看作为return是有局限性的。
例如:
fun = lambda x ,y ,z : x + y + z
fun(1,2,3)
此时的结果为6。正确的看法应该是这样:x ,y ,z 是传入的三个参数,x + y + z是表达式,也是函数体,返回的值就是整个的函数体,也就是x + y + z。
lambda表达式会使程序更加的简洁,合理利用lamda表达式是称为python高手的必经之路。
欢迎批评指正!