Lambda函数是一种特殊类型的函数,不表示为正则函数。Lambda函数没有任何可调用的函数名,它们是为单行简单函数创建的。lambda函数将消除 def
函数定义的关键字。Lambda函数也称为小型匿名函数,其中它没有任何函数名。在本教程的下一部分中,我们将看到lambda函数可以采用不同类型的参数。
Lambda函数的使用特性和用例
- 作为一个单行函数定义,它只包含表达式,不包含任何语句。
- 它被写为一行执行。
- Lambda函数由于其简单性和原子性而易于阅读。
- Lambda函数不支持类型注释。
- 通过在同一行中添加参数,可以在定义之后立即调用Lambda函数。
Lambda语法
Lambda函数定义的语法与其他Python关键字和结构非常不同。
VAR = lambda ARG1, ARG2, ... : EXPRESSION
-
VAR
将在其中分配lambda函数的变量名。 -
lambda
用于定义和创建lambda函数的关键字。 -
ARG1
,ARG2
,…是lambda函数的参数。我们可以使用一个参数或多个参数。因为它们是可选的,所以我们也可以提供零参数。 -
EXPRESSION
列出每次调用lambda函数时将执行的lambda函数体
Lambda示例
我们将从一个简单的例子开始,在这个例子中,我们将为lambda函数提供一个参数。我们将提供参数名称 a
lambda函数将分配给 x
.
x = lambda a: "This is the "+a
print(x("poftut.com"))
x = lambda a: a*a*a
print(x(3))
print(x(4))

- 在第一个示例中,我们将向lambda函数提供“poftut.com”,该函数将返回字符串“This is the poftut.com”。
- 在第二个例子中,我们为lambda函数提供了3,它与自身相乘3次。
- 在第二个例子中,我们为lambda函数提供了4,它与自身相乘3次。
相关文章: Python reduce()函数教程及示例
Lambda无 论元
我们可以使用lambda函数而不提供任何参数。我们将把表达式部分放到lambda函数中,并使用新创建的lambda函数。在本例中,我们将创建lambda函数并将其分配给 x
函数将打印“This is the X” 到屏幕上。
x = lambda : "This is the X"
print(x())

直接调用Lambda函数
Lambda函数也可以直接调用,而无需将其赋给变量。我们将在lambda函数定义之后提供参数。我们还将围绕lambda函数并用括号提供参数。在下面的例子中,我们将计算并打印“This site is poftut.com”。
(lambda x: x + 1)(2)
(lambda x: x * x + 1)(3)
(lambda x: "This site is "+x)("poftut.com")

多参数Lambda
Lambda函数可以在没有参数的情况下使用,也可以使用单个参数或多个参数。我们可以在一行中提供多个参数,这也称为位置参数。在本例中,我们将提供参数a作为1,b作为2,c作为5,如下所示。
x = lambda a, b, c: a + b + c
print(x(1, 2, 5))

带命名参数的Lambda
我们可以在lambda函数中使用命名参数。我们将设置 c
默认值为5。如果没有向lambda函数调用提供c,则将假定为5。如果提供了,则将使用提供的新值。
x = lambda a, b, c=5 : a + b + c
print(x(1, 2))
print(x(10, 20))
print(x(1, 2, 10))

参数列表可变的Lambda
如果提供的参数列表和计数是变量,则必须使用 args
可以映射可变长度参数的关键字。我们将使用 *args
作为可变长度参数,并在表达式中使用它们。
x = lambda *args : sum(args)
x(1,2,3)
x(1)
x(1,2)
x(1,2,3,4)
x(1,2,3,4,5)
x(1,2,3,4,5,6)
x(1,2,3,4,5,6,7)
x(1,2,3,4,5,6,7,8)
x(1,2,3,4,5,6,7,8,9)

具有关键字参数变量列表的Lambda
我们还可以在Lambda函数中使用关键字的可变列表。我们将使用 kwargs
关键字并用 values()
功能。我们将提供不同名称的参数。
x = lambda **kwargs : sum(kwargs.values())
x(a=1 , b=2 )
x(a=1 , b=2 , c=3 )
x(a=1 , b=2 , c=3 , d=4 )
x(a=1 , b=2 , c=3 , d=4 , e=5 )
x(a=1 , b=2 , c=3 , d=4 , e=5 , f=6 )

Lambda与Python交互Shell
Lambda提供了Python交互式shell的特殊用法。我们可以创建一个没有变量赋值的lambda函数,然后用下划线调用它 _
接线员。但是定义之后我们只能调用lambda函数一次。如果在定义之后第二次尝试调用lambda函数,我们将得到一个异常。
>>> lambda x: "This site is "+x
>>> _("POFTUT.com")
>>> lambda x: x * x + 1
>>> _(3)
>>> _(4)
>>> lambda x: x * x + 1
>>> _(4)

Lambda with filter()函数
filter()
函数用于根据函数中定义的情况过滤变量序列。Lambda函数对于创建用于过滤的情况非常有用。使用lambda函数还将使过滤器更具可读性。
mynumbers = [ 2 , 4 , 5 , 34 , 245 , 56 , 4 , 7 , 8 , 0 , 45 ]
filtered_numbers = list(filter(lambda x: (x%2 !=0), mynumbers))
print(filtered_numbers)

Lambda with map()函数
map()
函数用于在给定的列表元素上逐个运行给定的函数。Lambda函数另一个流行的用例是使用map()函数将它与给定的列表元素一起使用。在本例中,我们将使用lambda函数来逐个计算给定列表元素的平方。
mynumbers = [ 2 , 4 , 5 , 34 , 245 , 56 , 4 , 7 , 8 , 0 , 45 ]
filtered_numbers = list(map(lambda x: x * x , mynumbers))
print(filtered_numbers)

带reduce()函数的Lambda
reduce()
是另一个有趣的函数,从给定的列表中,给定的函数可以处理多个元素。作为一个函数,lambda可以非常有效地用于简单的操作。在本例中,我们将在每个步骤中对2个相邻元素求和或减少。
mynumbers = [ 2 , 4 , 5 , 34 , 245 , 56 , 4 , 7 , 8 , 0 , 45 ]
filtered_numbers = reduce(lambda x, y: x+y , mynumbers)
print(filtered_numbers)
