Python 匿名函数应用实践

今天我们来学习下 Python 中一种特殊的特殊函数:匿名函数。这篇文章比较基础,已经掌握的大侠们可以忽略此文章。

我们都知道 Python 中定义函数用 def 关键字开头,后面接函数名称和括号。一般为了调用函数更方便和灵活,我们都会加上参数。比如我们现在定义一个能打印出一个数的平方的函数。

像这种简单功能的函数,类似于开方、开根号、简单运算等每次都要新建一个函数来调用,很繁琐,有什么办法简单这个问题,那就要用到 Python 内置的高阶函数中的其中一种:匿名函数。

什么是匿名函数

语法

匿名函数语法如下:

lambda [arg1 [,arg2,…..argn]]:expression

比如说上面的计算平方的函数用匿名函数表达如下:

关键字用 lambda,:之前的 x 是参数,:后面的语句就是匿名函数的返回值。

用法

如需打印出 8 的平方:

接下来我们就结合 Python 的内置高阶函数 map 和 sorted 函数 一起来看下匿名函数复杂点的功能。Python 中高阶内置函数除了 匿名函数、map 函数、sorted 函数外还有 reduce 函数、filter 函数。

什么是高阶函数啊?高阶函数就是把函数当成参数传递的一种函数。今天主题是匿名函数,其他高阶函数以后在详细讲解,今天结合高阶函数 map 函数和 sorted函数来看看匿名函数的复杂用法。

匿名函数的复杂用法

我们先简单看看高阶函数 map 函数的作用是什么。

map 函数语法

map(function, iterable, …)

第一个参数 function 是函数,第二个 iterable 参数指一个或多个序列。

map() 作用是把 function 函数以此作用于后面序列的每一个元素上,使其生成一个新的序列。

现在我们先不用匿名函数,我们还是以上面定义的平方函数为例,用平方函数以此作用于列表 [1,2,3,4,5] 每个元素,生成新的列表 [1,4,9,16,25]。

在 Python3 中,map 函数的结果返回是一个迭代器,在 Python2 中返回的是一个列表,有 Python2 环境可以试试,Python3 需要把迭代器打印出来的话就赋予它类型即可。比如让它还是以列表形式显示。

现在我们用匿名函数替换掉 square 函数。

是不是代码更简洁了。

灵活运用

其实有些情况也不是非匿名函数不可,之前讲到的列表生成有时候也可以取代它,同样用上面的例子:

更简洁!所以学知识我们要灵活运用。什么时候使用 lambda,什么时候不用,需要具体情况具体分析,只要表达的意图清晰就好。一般情况下,如果 for..in..if 能做的,我都不会选择 lambda。

sorted 函数语法

iterable -- 可迭代对象。

cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。

key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。

reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

举例:结合匿名函数对下面数据按照名字降序排序

好了,今天匿名函数的知识就分享到这里。(作者:brucepk、AlicFeng)

干货分享

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180923B1H95B00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券