在Python中,有时候我们需要一个简单的函数去返回一些结果,但是我们又不想通过 def
专门去定义函数再引用,这种情况下有没有好的办法来完成呢?
答案是使用匿名函数,而Python中的匿名函数通过 lambda
表达式来完成。
当我们使用匿名函数时, lambda
只是一个表达式,它并不是一个代码块,比如我们使用 map()
函数 和 lambda
来实现计算一个数的平方:
>>> list(map(lambda x: x * x, [1, 2, 3, 4])) [1, 4, 9, 16]
在上面的 lambda
表达式中,我们并没有给其定义函数名,但其仍然能够正常执行。也就是说,我们在这里定义的是一个匿名函数:lambda x: x * x
,其中 lambda x
是匿名函数的声明部分,而 x * x
则是匿名函数的实现部分,且不需要写 return
语句。它其实等价于下面这个普通函数:
def demo1(x): return x * x
我们把这个匿名函数作为一个参数传递给 map()
,而 map()
中会把它看作一个和普通函数一样的函数,从而进一步进行处理。同理,我们还可以把匿名函数赋值给一个变量,然后通过变量来调用函数,请看下面的例子:
a, b = 10, 20 sum = lambda x, y: x + y print(sum) print(sum(a, b))
执行结果如下:
<function <lambda> at 0x000001F18AC9C268> 30
可以发现,上面的 sum
就是一个匿名函数,我们并没有写 return
语句,但依然能够返回结果。lambda x, y
是匿名函数的声明部分,而 x + y
则是匿名函数的实现部分。它其实等价于下面这个普通函数:
def demo2(x, y): return x + y
我们使用匿名函数时,一行代码就能够搞定了,那是不是所有的普通函数都应该替换成匿名函数呢?
答案肯定是不行的,尽管我们使用 lambda
表达式来定义简单的函数,但它的使用具有一定的局限性。匿名函数和普通函数之间,主要有以下几点区别: