Python匿名函数详解

学习一门语言最好的办法,就是教懂别人。在这里,我会从 Python 最基础的教程写起,慢慢一步步进阶。Python 基础比较好的也可以参考下,欢迎指教。

今天我们来学习下 Python 中一种特殊的特殊函数:匿名函数。这篇文章比较基础,已经掌握的大侠们可以忽略此文章,请直接滑到文末帮忙投下票,帮我做个调查,谢谢!

首先我们简单了解下函数的知识。

Python 函数

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

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

什么是匿名函数

匿名,顾名思义,不会显示出函数名称而直接调用其功能。匿名函数有哪些特点呢?

1、使用 Python 写一些执行脚本时,使用 lambda 可以省去定义函数的过程,让代码更加精简。

2、对于一些抽象的,不会别的地方再复用的函数,有时候给函数起个名字也是个难题,使用lambda不需要考虑命名的问题。

3、lambda主体只是单个表达式,不是一个代码块。lambda 与普通函数 function 定义方法来比较它的功能更小,它只是一个为简单函数所服务的对象,而 def 能处理更大型的数据任务。

匿名函数语法

匿名函数语法如下:

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

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

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

匿名函数用法

如需打印出 6 的平方:

接下来我们就结合 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 升序(默认)。

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

好了,今天匿名函数的知识就分享到这里。

 

文章为pk哥原创,我在我的公众号: Python 知识圈 上会分享更多心得体会,你也可以关注。

***版权申明:本文为 Python知识圈 pyzhishiquan.com 原创,没有Python知识圈书面授权,请勿以任何形式转载,摘编,复制或镜像。***

为您推荐

发表评论

电子邮件地址不会被公开。