一、匿名函数:python使用lambda来创建匿名函数。所谓匿名,就是说不再使用def语句这样标准的形式来定义一个函数。
1、lambda只是一个表达式,不是一个代码块,函数体比def简单的同时,也有’难以封装更多的逻辑进lambda表达式‘的不足。
2、lambda函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
3、虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
4、语法:lambda [arg1 [,arg2,.....argn]]:expression
如:result = lambda x: x * x #result是一个匿名函数,'lambda'和':'中间的元素个素就是所说的参数个数。':'后面的是所要进行的表达式。
print(result(5)) #输出25
这里顺便拓展一下lambda和map函数一起用的例子,以熟悉一下map等内置函数:
a、map():是python的一个内置函数,基本格式是:map(func,seq):func是一个函数对象,seq是一个序列对象,seq的每个元素按照从左到右的顺序依次被取出来,塞到func函数里,并将func的返回值依次存到一个列表里。
eg:>>>numbers = [1,3,6]
>>>newNumbers = tuple(map(lambda x:x,numbers))
>>>print(newNumbers) #输出:(1,3,6)
eg:>>> numbers = [0,1,2,3,4]
>>> map(add,numbers) #输出[1, 2, 3, 4, 5]
>>> map(lambda x: x + 1,numbers) #输出[1, 2, 3, 4, 5]
b、filter():根据条件过滤选择出想要的。
eg:>>> numbers = range(-4,4)
>>> list(filter(lambda x: x > 0,numbers)) #输出[1,2,3]
c、reduce():reduce 函数的第一个参数是一个函数,第二个参数是序列类型的对象,将函数按照从左到右的顺序作用在序列上。
eg:>>> reduce(lambda x,y: x+y,[1,2,3,4]) #输出10
reduce()和map()的区别:map相当于是上下运算的,而reduce是从左到右逐个元素进行运算。
eg:>>> list1 = [1,2,3,4]
>>> list2 = [5,6,7,8]
>>> list(map(lambda x,y: x + y,list1,list2))#输出[6, 8, 10, 12]