lambda表达式与高阶函数

作者: 活成理想中的样子 | 来源:发表于2017-09-29 18:48 被阅读61次

    一. lambda表达式

    lambda表达式又被称为匿名函数,当你想要临时使用一个函数,没有必要专门为此定义一个函数时,就可以使用lambda表达式。

    一个简单的lambda表达式:

    lambda x, y : x + y
    

    上面的lambda表达式定义了一个匿名函数,它有两个参数:x和y,函数的处理过程就是对x和y进行求和,并返回结果。

    如果我们的一个python程序是一部电影,那么那些被定义好的函数就是戏中设定的角色,它们会在戏中反复出现,而lambda表达式就是群众演员,它们只在戏中的特殊场景中临时出现,观众不一定不知道它们的名字,但就是这些龙套演员,让我们的戏更加丰富多彩。

    timg (1).jpeg

    就像《功夫》中的包租婆,是一个典型的龙套,但是却给观众留下了深刻的印象,也给剧情的推波助澜带来意想不到的效果。

    二. 高阶函数

    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

    相关文章

      网友评论

        本文标题:lambda表达式与高阶函数

        本文链接:https://www.haomeiwen.com/subject/gygiextx.html