当前位置: 首页 > 科技观察

Lambda函数_0

时间:2023-03-12 04:40:12 科技观察

Lambda函数介绍Lambda函数也称为匿名(没有名字)函数,它直接接受参数个数和参数要执行的条件或操作,用冒号隔开,并返回最后结果。要在大型代码库上编写代码时执行小任务,或在函数内执行小任务,在正常过程中会使用lambda函数。lambdaargument_list:expersionargument_list是一个参数列表,它的结构和Python中一个函数(function)的参数列表是一样的a,ba=1,b=2*args**kwargsa,b=1,*args为空。...表达式是关于参数的表达式。表达式中出现的参数需要定义在argument_list中,表达式只能是一行。1Nonea+bsum(a)1ifa>10else0[iforiinrange(10)]...普通函数和Lambda函数之间的区别没有名字Lambda函数没有名字,而普通操作有一个适当的名称。Lambda函数没有返回值。使用def关键字构建的普通函数返回值或序列数据类型,但在Lambda函数中返回一个完整的过程。假设我们要检查一个数字是偶数还是奇数,使用lambda函数语法类似于以下代码片段。b=lambdax:"Even"ifx%2==0else"Odd"b(9)FunctionsonlyinonelineLambda函数只在一行中编写和创建,普通函数中的代码不使用缩进重用Lambda函数不能用于代码重用,或者不能将此函数导入任何其他文件。相反,普通函数用于代码重用,可以在外部文件中使用。为什么使用Lambda函数?一般我们不使用Lambda函数,而是配合高阶函数使用。高阶函数是需要多个函数来完成一项任务的函数,或者当函数返回任何其他函数时,可以选择使用Lambda函数。什么是高阶函数?通过示例了解高阶函数。假设一个整数列表,必须返回三个输出。列表中所有偶数和列表中所有奇数的总和以及所有可被三整除的数字的总和首先假定由普通函数处理。在这种情况下,声明了三个不同的变量来存储各个任务,并使用一个for循环来处理和返回三个变量的结果。此方法正常工作。现在使用Lambda函数来解决这个问题,那么你可以使用三个不同的Lambda函数来检查一个要测试的数是偶数、奇数还是能被三整除,然后在结果上加上一个数。defreturn_sum(func,lst):result=0foriinlst:#ifval满足funciffunc(i):result=result+ireturnresultlst=[11,14,21,56,78,45,29,28]x=lambdaa:a%2==0y=lambdaa:a%2!=0z=lambdaa:a%3==0print(return_sum(x,lst))print(return_sum(y,lst))print(return_sum(z,lst))在这里创建一个高阶函数,其中Lambda函数作为一部分传递给普通函数。其实这种代码在网上随处可见。但是很多人在使用Python的时候忽略了这个功能,或者只是偶尔用到,但其实这些功能真的很方便,同时可以节省更多的代码行。接下来,我们一起来看看这些高阶函数。Python内置的高阶函数Map函数map()会根据提供的函数映射指定的序列。Map函数是一个接受两个参数的函数。第一个参数函数以参数序列中的每个元素调用函数函数,第二个参数是任何可迭代序列数据类型。返回一个包含每个函数函数的返回值的新列表。map(function,iterable,...)Map函数将在迭代器对象上定义某种类型的操作。假设我们想要对数组元素进行平方,即将一个数组的每个元素的平方映射到另一个产生所需结果的数组。arr=[2,4,6,8]arr=list(map(lambdax:x*x,arr))print(arr)我们可以以不同的方式使用Map函数。假设您有一个包含姓名、地址等详细信息的字典列表,目标是生成一个包含所有姓名的新列表。students=[{"name":"JohnDoe","fathername":"RobertDoe","Address":"123Hallstreet"},{"name":"RahulGarg","fathername":"KamalGarg","Address":"3-Upper-Streetcorner"},{"name":"AngelaSteven","fathername":"Jabobsteven","Address":"Unknown"}]print(列表(map(lambdastudent:student['name'],students)))>>>['JohnDoe','RahulGarg','AngelaSteven']以上操作通常发生在从数据库或网络抓取中获取数据,等场景。Filter函数Filter函数根据给定的特定条件过滤掉数据。即在函数中设置过滤条件,对元素进行迭代,保留返回值为True的元素。map函数对每个元素进行操作,而filter函数只输出满足一定条件的元素。假设有一个水果名称列表,任务是只输出名称中包含字符“g”的那些名称。fruits=['mango','apple','orange','cherry','grapes']print(list(filter(lambdafruit:'g'infruit,fruits)))filter(functionorNone,iterable)-->过滤器对象返回一个迭代器,那些函数或项目的可迭代项目是真实的。如果函数为None,则返回true。Reduce函数是一个特殊函数。不是Python内置函数,需要通过fromfunctoolsimportreduce导入。Reduce从序列数据结构返回单个输出值,它通过应用给定函数来减少元素。reduce(function,sequence[,initial])->value将包含两个参数的函数从左到右累积应用于序列的项目,从而将序列减少为单个值。如果存在initial,则将其放在项目之前的序列中,并在序列为空时用作默认值。假设您有一个整数列表并找到所有元素的总和。并使用reduce函数而不是使用for循环来处理这个问题。fromfunctoolsimportreducelst=[2,4,6,8,10]print(reduce(lambdax,y:x+y,lst))>>>30您还可以使用reduce函数而不是for循环来查找最大或最小的元素。lst=[2,4,6,8]#找到最大的元素print(reduce(lambdax,y:xifx>yelsey,lst))#找到最小的元素print(reduce(lambdax,y:xifx>>{2:4,4:16,6:36,8:64}#创建字典arr=[1,2,3,4,5,6,7,8]D2={item:item**2foriteminarrifitem%2!=0}print(D2)>>>{1:1,3:9,5:25,7:49}一个简单的应用如何快速找到多个字典的公钥方法dl=[d1,d2,d3]#d1,d2,d3是一个字典,目标是找到所有字典的公共键[kforkindl[0]ifall(map(lambdad:kind,dl[1:]))]示例dl=[{1:'life',2:'is'},{1:'short',3:'i'},{1:'use',4:'python'}][kforkindl[0]ifall(map(lambdad:kind,dl[1:]))]#1解析#list表达式遍历dl中第一个字典中的key[kforkindl[0]]#[1,2]#lambda的匿名函数判断字典中的key,即k值是否在字典的其余部分list(map(lambdad:1ind,dl[1:]))#[True,True]list(map(lambdad:2ind,dl[1:]))#[False,False]#列表表达式条件是上面的rresults([True,True])都为True,则输出对应的k值#1方法2#使用集合(set)交集操作fromfunctoolsimportreduce#reduce(lambdaa,b:a*b,range(1,11))#10!reduce(lambdaa,b:a&b,map(dict.keys,dl))写在最后,我了解了Lambda函数是什么,以及Lambda函数的一些使用方法。然后我们了解了Python中的高阶函数以及如何在高阶函数中使用lambda函数。除此之外,您还学习了高阶函数的替代方法:在列表推导式和字典推导式中执行先前的操作。虽然这些方法可能看起来很简单,或者您以前见过它们,但您很可能很少使用它们。你可以尝试在其他更复杂的函数中使用它们,使代码更简洁。