Python 中的 Lambda 函数和匿名函数

2023-09-17 22:17:22

def 关键字用于定义function in Python ,正如我们在上一章中看到的。lambda 关键字用于定义 Python 中的匿名函数。 通常,此类函数是一次性使用的。

语法:
lambda [arguments] : expression

lambda 函数在:符号后可以有零个或多个参数。 调用此函数时,将执行 : 之后的表达式。

square = lambda x : x * x
n = square(5)  #calling lambda function

上面,lambda 函数以 lambda 关键字开头,后跟参数 x:x * x的表达式将 x * x 的值返回给调用方。 整个 lambda 函数lambda x : x * x被分配给一个变量square以便像命名函数一样调用它。 变量名成为函数名,以便我们可以将其作为常规函数调用,如下所示。

上述 lambda 函数定义与以下函数相同:

def square(x):
    return x * x

表达式不需要始终返回值。以下 lambda 函数不返回任何内容。

greet = lambda name: print('Hello ', name) 
greet('Steve')  #output: Hello Steve

注意: lambda 函数只能有一个表达式。显然,它不能替换其主体可能具有条件、循环等的函数。

以下 lambda 函数包含三个参数:

sum = lambda x, y, z : x + y + z 
n = sum(5, 10, 15) #returns 30

lambda 函数可以通过在参数前加上 * 来获取任意数量的参数,如下所示:

sum = lambda *x: x[0]+x[1]+x[2]+x[3]  
n = sum(5, 10, 15, 20) #returns 50

无参数 lambda 函数(Parameterless Lambda Function)

以下是无参数 lambda 函数的示例。

greet = lambda : print('Hello World!')
greet() #output: Hello World!

匿名函数(Anonymous Function)

我们可以声明一个 lambda 函数并将其调用为匿名函数,而无需将其分配给变量。

(lambda x: print(x*x))(5) #output 25

上面,lambda x: x*x定义了一个匿名函数,并通过在括号中传递参数来调用它一次 (lambda x: x*x)(5)

在 Python 中,函数是一等公民,这意味着就像文字一样,函数也可以作为参数传递。

当我们想将函数作为参数之一提供给另一个函数时,lambda 函数很有用。 我们可以传递 lambda 函数而不将其分配给变量,作为匿名函数作为另一个函数的参数。

def dosomething(fn):
	print('Calling function argument:')
	fn()
	    
dosomething(lambda : print('Hello World')) # passing anonymous function
myfn = lambda : print('Hello World') 
dosomething(myfn) # passing lambda function

上面,dosomething()函数是用 fn 参数定义的,该参数在 dosomething() 中作为函数调用。 dosomething(lambda : print('Hello World'))使用匿名 lambda 函数作为参数调用 dosomething() 函数。

Python 具有将其他函数作为参数的内置函数。map()filter()reduce()函数是重要的函数式编程工具。他们都以函数作为他们的论据。参数函数可以是普通函数或 lambda 函数。

sqrList = map(lambda x: print(x*x), [1, 2, 3, 4]) # passing anonymous function
next(sqrList)
next(sqrList)
next(sqrList)
next(sqrList)
next(sqrList) #error 

本文内容总结: