Python 中的匿名函数,你会用吗
概念
我们从一个例子引入。
这里有一个元素为非空字符串的列表,按字符串最后一个字母将列表进行排序。如果原列表是 [‘abc’, ‘g’, ‘def’],则结果应该是 [‘abc’, ‘def’, ‘g’]。
很容易得到如下代码
我们发现, get_last_element 这个方法比较简单,并且只用了一次,但必须定义后得到一个名称才能使用。在上面的情境中,使用起来稍微麻烦了点,我们能不能直接定义了就用呢?当然可以。
使用很简单,有如下几个关键点
使用 lambda 关键字自动 return,不需要你自己写只有一行代码
知道了上面的内容,匿名函数的概念也大致清晰了。
使用误区
知道了匿名函数后,我们在开发的时候有时候不经意就把这个东西滥用了。
1 .给匿名函数命名
PEP 8 中建议我们不要写类似下面的代码
匿名函数可以直接当做变量一样传递,比如传给函数作为参数,并不要求它一定有个名字。
需要注意的是,其实上面的操作并没有真正起到给函数命名的作用。
如果需要给定义的函数命名,使用 def 关键字即可
通过 def 定义的函数才是真正有名称的,匿名函数的名称永远是 lambda
2. 没有必要的匿名函数
某些时候,我们没有使用匿名函数的必要,但却无意中使用了。
一般有两种情况。一是使用无意义的调用,比如下面的代码
将列表按元素的长度进行排序。
其实,我们可以直接这样
上面的一提出来大家马上就理解了,但是平时我们却或多或少的犯了类似的毛病。
另一方面,有很多函数,标准库中都已经实现了,我们不知道,所以做了多余的事情。
比如这里
这里的匿名函数可以直接用 mul 函数替换
Python 的 operator 模块提供了很多常用的操作,熟悉了后,你会慢慢喜欢上它的。里面除了算术、比较等操作,关于对字典、对象的操作也值得一提。
itemgetter 函数,根据键获取字典的值
attrgetter 函数,根据属性获取对应值
3. 降低可读性的匿名函数
按元素的长度和字典序对列表进行排序
上面的代码能够实现功能,但是我觉得下面的可读性更强一些
我们通过函数函数名就大概知道了函数的作用,如果是匿名函数的话,我们还得去看相应的逻辑。
4. 可能根本不需要传递函数
对一个列表进行求和,我们可能会看到这样的代码
其实,直接使用 sum 函数就行了
对于一些特定的需求,很多时候 Python 可能已经有了现成的方案。我们要有这方面的意识,尽可能简单的去解决问题。
5. 可以不使用 map/filter
Python 中的 map 和 filter 一般都结合匿名函数在使用,前者是在迭代过程中对元素做一些处理,后者是过滤掉一些元素。很多情况下,我们可以使用列表推导式或者生成器表达式代替它们。
用生成器表达式代替 map
用生成器表达式代替 filter
明显的可以看出,使用生成器表达式的代码可读性更强一些。
什么时候使用匿名函数
说了这么多匿名函数使用的误区,那么什么时候使用比较合理呢?我觉得满足下面的几个点,就可以考虑考虑了。
只用一次函数逻辑简单使用匿名函数前尽可能的确定 Python 没有自带类似功能的函数
Python 中的匿名函数,你会用吗相关推荐
- Python中的匿名函数和函数式编程
Python中的匿名函数和函数式编程 文章目录 Python中的匿名函数和函数式编程 一.匿名函数 匿名函数的格式: 二.函数式编程 map() filter() reduce() 区别 三.'三目运 ...
- python中匿名函数的作用_什么是Python中的匿名函数
匿名函数 lambda x , y : x+y 1.匿名的目的就是要没有名字,给匿名函数赋给一个名字是没有意义的. 2.匿名函数的参数规则.作用域关系与有名函数是一样的. 3.匿名函数的函数体通常应该 ...
- python中的匿名函数_python匿名函数
文章导读: 以前自己一直没搞明白Python中的匿名函数,现在拿这个问题基本上搞明白了,拿自己的理解整成一篇文章,附带大量例子,让其更加好理解. 在编程语言中,函数的应用: 1. 代码块重复,这时候必 ...
- matlab匿名函数求导,MATLAB中的匿名函数和Python中的匿名函数
在MATLAB和Python中都有一个叫做匿名函数的东西,在这里对比一下. 一. MATLAB中这样来定义一个匿名函数: f = @(x1, x2, ...) exper @后面的括号里面是自变量,然 ...
- python中定义匿名函数的关键字是,Python中的匿名函数
写python的时候,大多数场景下,我都是if else选手,因为最核心的逻辑几乎都是通过if else语句来实现的.关于匿名函数这块儿,其实可以用常见的循环等方法来实现,但是如果你想成为一个pyth ...
- Python 中的匿名函数,你滥用了吗?
概念 我们从一个例子引入. 这里有一个元素为非空字符串的列表,按字符串最后一个字母将列表进行排序.如果原列表是 ['abc', 'g', 'def'],则结果应该是 ['abc', 'def', 'g ...
- python中的匿名函数lambda
匿名函数 python 使用 lambda 来创建匿名函数. 所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数. lambda 只是一个表达式,函数体比 def 简单很多. lambda ...
- Python中的匿名函数及递归思想简析
匿名函数 前言 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如何去学习更加高深的知识. 那么针对这三类 ...
- Python中的匿名函数
1.概念 匿名函数其实就是lambda表达式 语法 : lambda 形参列表:函数体 # 匿名函数 def text(x, y):result = x + ylambda x, y: x + y ...
最新文章
- 【高德地图API】那些年我们一起开发的APP—即LBS应用模式分享
- 799. 最长连续不重复子序列 【双指针经典板子题】
- Web 趋势榜:上周最有意思、又实用的 10 大 Web 项目 - 210730
- 关于Eclipse创建Android项目时,会多出一个appcompat_v7的问题
- 3部世界顶级宇宙纪录片,献给对宇宙万物充满好奇的你
- 关于静态编译出现的问题以及解决方法
- 19岁少女辍学就业,却遭身价2.5亿创业公司解雇
- [Java集合源码阅读]-ArrayList扩容机制
- 易语言 word类excel类 的 源码和模块
- 在Linux上下载arduino
- Android实现蝴蝶动画,抖音蝴蝶特效怎么弄的?抖音最近很火的蝴蝶特效制作|安卓手机给视频添加蝴蝶特效...
- 计算机word窗口的组成,word文件的组成
- 从SAP顾问教JAVA开发说起
- VUE MVVM实现
- 计算机广东大专院校排名2018,重磅!广东85所专科院校官方排名刚刚出炉,这所高职回归第一!...
- [No00002A]26个英语字母的原始象形意义、含义、产生及发展历史
- 联合概率数据互联(JPDA) ----多假设跟踪(MHT)
- 使用osmconvert转换pbf文件至osm文件
- 两个月的面试真实经历,告诉大家如何能够进入大厂工作?
- 网络问题解决—电脑能上网(QQ微信和浏览器一级网页)但浏览器打不开二级网页