一. lambda表达式
lambda表达式又被称为匿名函数,当你想要临时使用一个函数,没有必要专门为此定义一个函数时,就可以使用lambda表达式。
一个简单的lambda表达式:
lambda x, y : x + y
上面的lambda表达式定义了一个匿名函数,它有两个参数:x和y,函数的处理过程就是对x和y进行求和,并返回结果。
如果我们的一个python程序是一部电影,那么那些被定义好的函数就是戏中设定的角色,它们会在戏中反复出现,而lambda表达式就是群众演员,它们只在戏中的特殊场景中临时出现,观众不一定不知道它们的名字,但就是这些龙套演员,让我们的戏更加丰富多彩。
就像《功夫》中的包租婆,是一个典型的龙套,但是却给观众留下了深刻的印象,也给剧情的推波助澜带来意想不到的效果。
二. 高阶函数
python支持函数式编程,允许我们将一个函数赋值给一个变量,也允许将一个函数作为参数传入另一个函数,这种接收另一个函数作为参数的函数就叫做高阶函数。
举个例子:
def f(x):
return x * x
def high_level(x, y, f):
return f(x) + f(y)
print high_level(1, 2, f)
上面例子中,f是一个函数,它作为一个参数传给了high_level函数,high_level函数就是一个高阶函数。
三. lambda表达式在高阶函数中的应用
以上,我们已经了解了lambda表达式和高阶函数的概念,之所以把它们放到一起说,是因为它们是一对好搭档,配合起来简直是天衣无缝。
我们来看一个具体例子:实现一个函数,求一个给定数n的阶乘。
通常的实现如下:
def factorial(n):
result = 1
for i in range(1, n + 1):
result *= i
return result
但是如果使用lambda表达式和高阶函数,则代码非常简单:
def factorial(n):
return reduce(lambda x, y : x * y, range(1, n + 1))
其中,reduce
函数是python内置的一个高阶函数,它接受两个参数:一个函数f,以及一个列表list。执行过程为,将列表list中的第一个元素和第二个元素作为传入函数调用函数f,得到的结果再和第三个元素继续调用函数f,最终返回得到的结果。
对于求5的阶乘,即factorial(5), range(1, 6)相当于是列表[1, 2, 3, 4, 5]则上面的执行过程如下:
计算1*2,得到2
计算2*3,得到6
计算6*4,得到24
计算24*5,得到120
返回
在python中,还有很多高阶函数,如map函数,filter函数,这里不一一列举,大家在具体的场景中使用时,自然会体会到其中的妙处。
参考资料
Lambda 表达式有何用处?如何使用?
Python中lambda表达式学习
本文已迁移至我的博客:http://ipenge.com/28296.html