初学者指南,了解Python Lambda函数

Python中的Lambda是最有用,最重要和最有趣的功能之一。不幸的是,它们也容易被误解和弄错。

在本文中,我们将解释您需要了解的有关这些神秘函数,如何使用它们以及为什么它们被使用的所有知识。

在学习这些实际示例之前,您可能希望设置一个Python虚拟环境。

什么是Python中的Lambda?

lambda是只是在Python中定义函数的一种方式。它们有时被称为“ lambda运算符"或“ lambda函数"。

如果您以前使用过Python,则可能已经使用 def 关键字定义了函数,并且到目前为止,对您来说效果还不错。那么,为什么还有另一种方法可以做同样的事情呢?

区别在于lambda函数是匿名的。意思是,它们是不需要命名的函数。在“实际"函数太大而又笨重的情况下,它们可用于创建小的一次性函数。

Lambda返回一个函数对象,该对象可以分配给变量。 Lambda可以有任意数量的参数,但只能有一个表达式。您不能在lambda内调用其他函数。

lambda函数的最常见用法是在需要简单的单行函数的代码中,而编写一个完整的常规函数​​可能会过大。下文将在“关于映射,过滤和缩小的内容?"下对此进行更详细的介绍。

如何在Python中使用Lambdas

在查看lambda函数之前,我们先来看一下在超级基本功能中,定义了“传统"方式:

def add_five(number):  return number + 5 print(add_five(number=4))

此功能非常基础,但它用于说明lambda。您的可能比这更复杂。此函数会将通过 number 参数传递给它的任何数字加5。

这是作为lambda函数的外观:

add_five = lambda number: number + 5  print(add_five(number=4))

而不是使用< strong> def ,使用 lambda 一词。不需要括号,但是 lambda 关键字之后的所有单词都将创建为参数。冒号用于分隔参数和表达式。在这种情况下,表达式为数字+ 5

不需要使用 return 关键字,lambda会自动为您执行此操作。

下面是创建带有两个参数的lambda函数的方法:

add_numbers_and_five = lambda number1, number2: number1 + number2 + 5  print(add_numbers_and_five(number1=4, number2=3))

如果您仍然不确定lambda的要点,下一节将深入探讨并帮助您了解

具有Map,Filter和Reduce的Python Lambdas

Python核心库提供了三种方法,分别称为 map reduce >和过滤器。这些方法可能是使用lambda函数的最佳理由。

map 函数需要两个参数:函数和列表。它采用该功能并将其应用于列表中的每个元素,并将修改后的元素列表作为映射对象返回。 列表功能用于将生成的地图对象再次转换为列表。

此处介绍如何使用不带lambda的地图:

list1 = [2, 4, 6, 8]print(list1)def add_five(number):  return number + 5 new_list = list(map(add_five, list1))print(new_list)

此地图功能很方便,但可能会更好。 add_five 函数作为参数传递,但是如果您不想每次使用map都创建函数,该怎么办?您可以改用lambda!

这是相同的代码,只是功能被lambda代替:

list1 = [2, 4, 6, 8]print(list1) new_list = list(map(lambda x: x + 5, list1))print(new_list)

您可以看到,整个 add_five 功能不再需要。取而代之的是,使用lambda函数来保持事物的整洁。

使用 filter 函数,过程几乎相同。 过滤器采用一个函数,并将其应用于列表中的每个元素,并仅使用导致该函数返回True的元素创建一个新列表。

首先,没有lambdas:

numbers = [1, 4, 5, 10, 20, 30]print(numbers)def greater_than_ten_func(number):  if number > 10:    return True  else:    return Falsenew_numbers = list(filter(greater_than_ten_func, numbers)) print(new_numbers)

这段代码没什么错,但是它有点长。让我们看看lambda可以删除多少行:

numbers = [1, 4, 5, 10, 20, 30]print(numbers)new_numbers = list(filter(lambda x: x > 10, numbers))print(new_numbers)

lambda函数已取代了整个 greater_than_ten_func 的需要!只需五个简单的词就可以完成。这就是lambda功能强大的原因:它们减少了简单任务的混乱情况。

最后,让我们看一下 reduce 。 Reduce是另一个很酷的Python函数。它将滚动计算应用于列表中的所有项目。您可以使用它来计算总和,或将所有数字相乘:

from functools import reducenumbers = [10, 20, 30, 40]print(numbers)def summer(a, b):  return a + b result = reduce(summer, numbers)print(result)

此示例需要从 functools 模块导入 reduce ,但不要担心,functools模块是Python核心库的一部分。

使用lambda的情况几乎相同,不需要功能:

from functools import reducenumbers = [10, 20, 30, 40]print(numbers) result = reduce(lambda a, b: a + b, numbers)print(result)

Python Lambdas要注意的事情

这些示例展示了Python核心库中的lambda函数以及映射,过滤和归约有多么容易。尽管如此,lambda函数还是有一些用处。

如果您要做的不仅仅是基本任务,或者想调用其他方法,请使用普通函数。 Lambda非常适合使用匿名函数,但它们只能具有一个表达式。如果您的lambda开始看起来像是正则表达式,那么可能是时候重构为专用方法了。

有关更多提示,请查看我们的Python面向对象编程指南。

标签: 编码教程 Python