写点什么

细说 Python Lambda 函数的用法,建议收藏!

发布于: 2021 年 04 月 19 日

​​​​​​​​​​​​摘要:今天我就和大家聊聊 lambda 函数,在 Python 编程中,大家习惯将其称为表达式。


本文分享自华为云社区《从零开始学python| 什么是Lambda函数以及如何使用它们?》,原文作者:Yuchuan。

 

名称是用于引用或寻址任何实体的约定。我们周围的几乎所有事物都有名字。编程领域也与此一致。但这是必须命名的吗?还是您可以拥有“匿名”商品?答案是肯定的。Python 提供了 Lambda 函数,也称为匿名函数,实际上是无名的。因此,让我们按以下顺序继续学习 Python 的这些“匿名之谜”。


  • Why are Python Lambda Functions required?

  • What are Python Lambda Functions?

  • How to write Lambda Functions?

  • How do Anonymous functions reduce the size of the code?

  • Python Lambda functions within user defined functions

  • How to use Anonymous functions within:

filter()

map()

reduce()


因此,让我们开始:)

为什么要使用 Python Lambda 函数?


当您只需要一次使用某些功能时,匿名功能的主要目的就会显现出来。可以在任何需要的地方创建它们。由于这个原因,PythonLambda 函数也称为抛出函数,与其他预定义函数(例如 filter(),map()等)一起使用。与普通的 python 函数。


为了证明这一点,让我们继续学习 Python Lambda 函数。

什么是 Python Lambda 函数?


Python Lambda 函数是没有任何名称的函数。它们也称为匿名或无名功能。“ lambda”一词不是名称,而是关键字。此关键字指定后面的函数是匿名的。


现在您已经知道这些匿名函数指的是什么,让我们进一步了解一下如何编写这些 PythonLambda 函数。

如何用 Python 编写 Lambda 函数?


使用 lambda 运算符创建 Lambda 函数,其语法如下:


句法:


lambda 参数:表达式


Python lambda 函数可以具有任意数量的参数,但只需要一个表达式。输入或自变量可以从 0 开始,并可以达到任何限制。就像任何其他函数一样,具有不带输入的 lambda 函数也很好。因此,您可以使用以下任何格式的 lambda 函数:


例子:


lambda:“指定目的”


在这里,lambda 函数不接受任何参数。


例子:


拉姆达一个 1:“指定使用的 1 “


在这里,lambda 接受一个输入,即 1。


同样,您可以具有 lambda a 1,a 2,a 3 ..a n。


让我们举几个例子来证明这一点:


范例 1:


a = lambda x: x*xprint(a(3))
复制代码


输出: 9


范例 2:


a = lambda x,y: x*yprint(a(3,7))
复制代码


输出:  21


如您所见,我在这里举了两个例子。第一个示例仅使用带有一个表达式的 lambda 函数,而第二个示例具有传递给它的两个参数。请注意,两个函数都有一个表达式,后跟参数。因此,在需要多行表达式的地方不能使用 lambda 函数。


另一方面,普通的 python 函数可以在其函数定义中使用任意数量的语句。

匿名函数如何减少代码的大小?


在比较所需的代码量之前,让我们首先写下常规函数的语法,然后将其与前面所述的 lambda 函数的语法进行比较。


Python 中的任何常规函数都是使用 def 关键字定义的,如下所示:


句法:


def function_name(parameters):

语句


如您所见,lambda 函数所需的代码量比普通函数少得多。


让我们用现在的普通函数重写前面的示例。


例子:


def my_func(x):    return x*xprint(my_func(3))
复制代码


输出:  9


如您所见,在上面的示例中,我们需要在 my_func 中使用 return 语句来计算 3 的平方值。相反,lambda 函数不使用此 return 语句,而是使用匿名函数的主体在冒号后跟函数本身写在同一行。因此,函数的大小小于 my_func 的大小。


但是,上述示例中的 lambda 函数是使用其他一些变量 a 调用的。这样做是因为这些函数是无名的,因此需要调用某些名称。但是,当您需要实际分配其他名称来调用它们时,为什么要使用这样的无名函数,这一事实似乎令人困惑?当然,在为我的函数分配名称 a 之后,它不再不再是无名的了!正确的?


这是一个合理的问题,但重点是,这不是使用这些匿名函数的正确方法。


匿名函数最好在其他将函数用作参数或返回函数作为输出的其他高阶函数中使用。为了证明这一点,让我们现在继续进行下一个主题。

用户定义函数中的 Python Lambda 函数: 


如上文所述,lambda 函数可在其他函数中使用,以标记出最大的优势。


以下示例由 new_func 组成,这是一个带有一个参数 x 的常规 python 函数。然后将此参数添加到通过 lambda 函数提供的未知参数 y 中。


例子:


def new_func(x):    return(lambda y: x+y)t=new_func(3)u=new_func(2)print(t(3))print(u(3))
复制代码


​输出: 

65


如您所见,在上面的示例中,每当我们使用 new_func()时,都会调用 new_func 中存在的 lambda 函数。每次,我们都可以将单独的值传递给参数。既然您已经了解了如何在高阶函数中使用匿名函数,那么让我们继续了解它的最流行用法之一是在 filter(),map()和 reduce()方法中。

如何在 filter(),map()和 reduce()中使用匿名函数:


filter()中的匿名函数


筛选():


filter()方法用于在另一个作为参数传递的函数的帮助下,过滤给定的 iterables(列表,集合等),以测试所有元素为真还是假。


该函数的语法为:


句法:


过滤器(函数,可迭代)


现在考虑以下示例:


例子:


my_list = [2,3,4,5,6,7,8]new_list = list(filter(lambda a: (a/3 == 2), my_list))print(new_list)
复制代码


输出:  [6]


在这里,my_list 是可迭代值的列表,该值传递给过滤器函数。此函数使用 lambda 函数检查列表中是否有任何值(除以 3 后等于 2)。输出由满足匿名函数中存在的表达式的列表组成。


地图():


Python 中的 map()函数是将给定函数应用于所有可迭代对象并返回新列表的函数。


句法:


地图(函数,可迭代)


让我们以一个示例来演示 lambda 函数在 map()函数中的用法:


例子:


my_list = [2,3,4,5,6,7,8]new_list = list(map(lambda a: (a/3 != 2), li))print(new_list)
复制代码


输出:


[True,True,True,True,False,True,True]


上面的输出显示,只要可迭代变量的值除以 3,就不等于 2,则返回的结果应为 True。因此,对于 my_list 中的所有元素,当条件更改为 False 时,它将返回 true(除了值 6 之外)。


减少():


reduce()函数用于将某些其他函数应用于作为参数传递给它的元素列表,并最终返回单个值。


该函数的语法如下:


句法:


减少(功能,顺序)


例子:


from functools import reducereduce(lambda a,b: a+b, [23,21,45,98])
复制代码


下图描述了上面的示例:



输出: 187


输出清楚地表明,列表的所有元素都被连续添加以返回最终结果。


点击关注,第一时间了解华为云新鲜技术~

发布于: 2021 年 04 月 19 日阅读数: 20
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
细说Python Lambda函数的用法,建议收藏!