摘要:今天跟大家聊聊lambda函数。在Python编程中,大家习惯称它为表达式。本文分享自华为云社区《从零开始学python | 什么是Lambda函数以及如何使用它们?》,原作者:雨川。名称是用于指称或称呼任何实体的约定。几乎我们周围的一切都有一个名字。编程领域也与此相符。但是一定要有名字吗?或者您可以拥有“匿名”物品吗?答案是肯定的。Python提供了Lambda函数,又称匿名函数,实际上是无名的。那么让我们按照以下顺序继续了解Python的这些“匿名之谜”。为什么需要PythonLambda函数?什么是PythonLambda函数?如何编写Lambda函数?匿名函数如何减少代码的大小?用户定义函数中的PythonLambda函数如何在filter()map()reduce中使用匿名函数()那么让我们开始吧:)为什么要使用PythonLambda函数?当您只需要使用某些功能一次时,匿名函数的主要目的就会显现出来。它们可以在任何需要的地方创建。因此,PythonLambda函数也称为抛出函数,与其他预定义函数(例如filter()、map()等)一起与普通python函数一起使用。为了演示这一点,让我们继续使用PythonLambda函数。什么是PythonLambda函数?PythonLambda函数是没有任何名称的函数。它们也称为匿名或未命名函数。“lambda”这个词不是名字,而是关键字。此关键字指定以下函数是匿名的。现在您知道这些匿名函数指的是什么,让我们仔细看看如何编写这些PythonLambda函数。如何在Python中编写Lambda函数?Lambda函数是使用lambda运算符创建的,其语法如下:语法:lambda参数:表达式Pythonlambda函数可以有任意数量的参数,但只需要一个表达式。输入或参数可以从0开始,可以达到任何限制。拥有没有输入的lambda函数很好,就像任何其他函数一样。因此,您可以使用以下任何格式的lambda函数:示例:lambda:"specifiedpurpose"这里,lambda函数不接受任何参数。示例:lambdaa1:"Specify1touse"此处,lambda接受一个输入,即1。同样,您可以使用lambdaa1、a2、a3..an。让我们举几个例子来证明这一点:示例1:a=lambdax:x*xprint(a(3))输出:9示例2:a=lambdax,y:x*yprint(a(3,7))输出:21如你所见,我这里有两个例子。第一个示例仅使用带有一个表达式的lambda函数,而第二个示例有两个传递给它的参数。请注意,这两个函数都有一个表达式,后跟参数。因此,在需要多行表达式的地方不能使用lambda函数。另一方面,普通的Python函数可以在其函数定义中使用任意数量的语句。匿名函数如何减少代码大小?在比较所需的代码量之前,让我们先写下常规函数的语法,然后将其与前面介绍的lambda函数的语法进行比较。Python中的任何常规函数都使用def关键字定义,如下所示:语法:deffunction_name(parameters):statement如您所见,lambda函数需要的代码比普通函数少得多。现在让我们用一个普通函数重写前面的例子。示例:defmy_func(x):returnx*xprint(my_func(3))Output:9如您所见,在上面的示例中,我们需要使用my_func中的return语句来计算3的平方值。对比,lambda函数不使用这个return语句,而是使用写在冒号后同一行的匿名函数的主体作为函数本身。因此,函数的大小小于my_func的大小。但是,上面示例中的lambda函数是使用其他一些变量a调用的。这样做是因为这些函数是未命名的,因此需要通过某个名称来调用。但是,当您需要实际分配其他名称来调用它们时,为什么要使用这些无名函数这一事实似乎令人困惑?当然,给我的函数取了名字a之后,就不是无名了!正确的?这是一个合理的问题,但重点是,这不是使用这些匿名函数的正确方法。匿名函数最好用在其他将函数作为参数或返回函数作为输出的高阶函数中。为了证明这一点,现在让我们进入下一个话题。PythonLambdafunctionsinsideUserDefinedFunctions:如上所述,lambdafunctions可以在其他函数内部使用,以标记最大的优势。以下示例由new_func组成,这是一个带有一个参数x的常规python函数。然后将此参数添加到通过lambda函数提供的未知参数y。示例:defnew_func(x):return(lambday:x+y)t=new_func(3)u=new_func(2)print(t(3))print(u(3))output:65如你所见,在上面的示例中,每当我们使用new_func()时,都会调用new_func中存在的lambda函数。每次,我们都可以将一个单独的值传递给参数。现在您已经了解了如何在高阶函数中使用匿名函数,让我们继续了解它最流行的用法之一是在filter()、map()和reduce()方法中。Howtouseanonymousfunctionsinfilter(),map()andreduce():Anonymousfunctionsinfilter():filter():filter()方法用于过滤给定的可迭代对象(列表、集合等)测试所有元素的真假。该函数的语法为:语法:filter(function,iterable)现在考虑以下示例:示例:my_list=[2,3,4,5,6,7,8]new_list=list(filter(lambdaa:(a/3==2),my_list))print(new_list)output:[6]这里,my_list是传递给过滤函数的可迭代值列表。此函数使用lambda函数检查列表中是否有任何值(除以3等于2)。输出由满足匿名函数中存在的表达式的列表组成。map():Python中的map()函数是将给定函数应用于所有可迭代对象并返回一个新列表的函数。语法:map(function,iterable)举个例子来演示lambda函数在map()函数中的用法:例子:my_list=[2,3,4,5,6,7,8]new_list=list(map(lambdaa:(a/3!=2),li))print(new_list)boldoutput:[True,True,True,True,False,True,True]上面的输出表明只要将iterable变量的值除乘以3不等于2,返回结果应为True。因此,对于my_list中的所有元素,当条件更改为False(值6除外)时,它将返回true。reduce():reduce()函数用于将一些其他函数应用于作为参数传递给它的元素列表,并最终返回单个值。该函数的语法如下:语法:reduce(function,order)例子:fromfunctoolsimportreducereduce(lambdaa,b:a+b,[23,21,45,98])下图描述了上面的例子:输出:187的输出很清楚的显示了列表的所有元素都被连续相加返回了最终的结果。点击关注,第一时间了解华为云的新鲜技术~
