《手把手陪您学Python》29——匿名函数

在前几篇中,我们完整介绍了Python自定义函数的特性、参数和返回值,大家可以通过点击下方的链接进行了解。

《手把手陪您学Python》26——自定义函数

《手把手陪您学Python》27——自定义函数的参数

《手把手陪您学Python》28——自定义函数的返回值

虽然自定义函数很强大,但还不是Python的全部。

今天,我们将要学习一种新的函数,叫做匿名函数。匿名函数本质上也可以看做是一种自定义函数,只不过是以匿名的方式来展示。

1、匿名函数的定义

我们知道,每一个自定义函数都是有函数名的,并通过def关键字进行声明。而匿名函数是不需要定义函数名的,通过Lambda关键字进行定义,告诉大家“我没有名字,我是一个匿名函数”。

但这可能只是Lambda函数被翻译成“匿名函数”的原因。如果从原理上看,匿名函数之所以被称之为“匿名函数”,是因为——

和def关键字声明的函数不同,匿名函数对象自身并没有一个显式的__name__属性。

看到这样的解释是否有点不明觉厉,其实我也看不懂,就当做提前了解的一点知识吧,随着我们学习的不断深入,以后可能就会懂了。。。

2、匿名函数的作用

匿名函数是一种通过单个语句生成函数的方式,其结果就是返回值。

In [1]: def pingfang(x):
            return x * x
            
        result = pingfang(2)
        print(result)
        
Out[1]: 4
In [2]: result = lambda x: x * x
        print(result(2))
Out[2]: 4

从上面两个实例的比较我们可以看出来以下两点:

一、匿名函数是一种自定义函数的紧凑的表达形式,只需要用一行代码,就能够实现普通自定义函数从定义到返回值的整个代码段的作用,并且具有更高的可读性,也是在Python编程中非常常用的编写形式。

但在应用匿名函数时,一般只会将一些比较简单的函数转化成匿名函数来使用。如果是非常复杂和大型的函数,还是要使用自定义函数的形式,如果强制以匿名函数的方式实现,可能就得不偿失了。

二、lambda函数返回函数名作为结果。应用匿名函数后,原来接收函数返回值的变量result实际上变成了一个result(x)函数,也就是我们使用lambda关键字,用一行代码定义了一个result(x)函数。如果我们把变量名称修改一下,这种关系可能会更加清晰。

In [3]: pingfang = lambda x: x * x
        print(pingfang(2))
Out[3]: 4

3、匿名函数的格式

从上面的实例我们也看到了,匿名函数是一个由lambda关键字定义的语句,其语法格式为:

<函数名> = lambda <参数>: <表达式>

从语法格式上也能看出来,和我们上面第二点讲的是一样的,lambda函数返回的是一个<函数名>。

虽然匿名函数一般用于比较简单的函数的定义,但上面的实例都只有一个参数,也过于简单了,下面就举几个稍微复杂但很高效的实例。

In [4]: tixingmianji = lambda shangdi, xiadi, gao: (shangdi + xiadi) * gao / 2   # 多个参数
        print("梯形面积等于{}。".format(tixingmianji(2, 5, 3)))
Out[4]: 梯形面积等于10.5。
In [5]: str = ['lee', 'jupyter', 'aaaaa', '23400', '**##^^']
        str.sort(key = lambda x: len(set(list(x))))   # 按照字符串不重复元素的个数排列,set()用于去除重复元素
        str
Out[5]: ['aaaaa', 'lee', '**##^^', '23400', 'jupyter']

 4、柯里化

柯里化是计算机科学术语(以数学家Haskell Curry命名),它表示通过部分参数应用的方式,从已有的函数中衍生出新的函数。

例如,我们有一个不重要的函数,其功能是将两个数加在一起:

def add_numbers(x, y):
    return x + y

使用这个函数,我们可以衍生出一个只有一个变量的新函数,add_five,也就是可以给参数加上5:

add_five = lambda y: add_numbers(5 + y)

其中,第二个参数y,对于函数add_numbers来说,就是柯里化了。

虽然名字听上去很高大上,但是这个过程很容易理解,其实就是使用匿名函数定义了一个新函数(add_five),而这个新函数调用了已经存在的函数(add_numbers)而已。

以上就是我们对匿名函数的讲解。

但我们发现,截至目前,我们学习的函数都是在一个程序或者文件中体现的,虽然可以复用,但也仅仅只能在这一个程序或者文件中复用。如果想在多个程序或者文件中复用同一个函数,难道还需要在每一个程序或者文件中都定义同一个函数么?

下一篇,我们将要介绍的模块,就是要解决在不同程序或者文件中复用函数的方法,敬请关注。


感谢阅读本文!如有任何问题,欢迎留言,一起交流讨论^_^

要阅读《手把手陪您学Python》系列文章的其他篇目,请关注公众号点击菜单选择,或点击下方链接直达。

《手把手陪您学Python》1——为什么要学Python?

《手把手陪您学Python》2——Python的安装

《手把手陪您学Python》3——PyCharm的安装和配置

《手把手陪您学Python》4——Hello World!

《手把手陪您学Python》5——Jupyter Notebook

《手把手陪您学Python》6——字符串的标识

《手把手陪您学Python》7——字符串的索引

《手把手陪您学Python》8——字符串的切片

《手把手陪您学Python》9——字符串的运算

《手把手陪您学Python》10——字符串的函数

《手把手陪您学Python》11——字符串的格式化输出

《手把手陪您学Python》12——数字

《手把手陪您学Python》13——运算

《手把手陪您学Python》14——交互式输入

《手把手陪您学Python》15——判断语句if

《手把手陪您学Python》16——循环语句while

《手把手陪您学Python》17——循环的终止

《手把手陪您学Python》18——循环语句for

《手把手陪您学Python》19——第一阶段小结

《手把手陪您学Python》20——列表

《手把手陪您学Python》21——元组

《手把手陪您学Python》22——字典

《手把手陪您学Python》23——内置序列函数

《手把手陪您学Python》24——集合

《手把手陪您学Python》25——列表推导式

《手把手陪您学Python》26——自定义函数

《手把手陪您学Python》27——自定义函数的参数

《手把手陪您学Python》28——自定义函数的返回值

For Fans:关注“亦说Python”公众号,回复“手29”,即可免费下载本篇文章所用示例语句。

亦说Python——Python爱好者的学习分享园地

猜你喜欢

转载自blog.csdn.net/mnpy2019/article/details/110679649
今日推荐