原标题: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 中的匿名函数,你会用吗相关推荐

  1. python匿名函数的作用_Python中的匿名函数及递归思想简析

    匿名函数 前言 上次咱们基本说了一下函数的定义及简单使用,Python中的基本函数及其常用用法简析,现在咱们整点进阶一些的.同样都是小白,咱也不知道实际需要不,但是对于函数的执行顺序以及装饰器的理解还 ...

  2. python主函数的作用_python中main函数的用法

    原博文 2020-03-27 20:25 − **什么场景下会有main函数?** 当该python脚本被作为模块(module)引入(import)时,其中的main()函数将不会被执行. **ma ...

  3. python语言中print函数的作用_python中如何使用print函数

    Python中print语句 1.逗号分隔符 在Python中print语句可根据sys.stdout中包含的文件生成输出,它接受一个逗号分隔的对象表,如下实例:x = 1 y = 2 z = 3 p ...

  4. python中格式化字符串的作用_python中字符串格式化的意义(化妆)

    格式 描述 %%百分号标记 #就是输出一个% %c字符及其ASCII码 %s字符串 %d有符号整数(十进制) %u无符号整数(十进制) %o无符号整数(八进制) %x无符号整数(十六进制) %X无符号 ...

  5. python中的变量的作用_Python中的变量作用域

    python中变量作用域包括: L (Local) 局部作用域,函数内部声明但没有使用global的变量 E (Enclosing) 闭包函数外的函数中,def或者lambda的本地作用域 G (Gl ...

  6. python中装饰器的作用_Python中装饰器的用法

    装饰器的作用 当我们需要为函数拓展新的功能,但是又不能修改函数的内部结构时,就可以通过装饰器来完成.通过装饰器为函数拓展功能符合"对于扩展是开放的,对于修改是封闭的"这一开闭原则. ...

  7. python中yield语句的作用_Python中关键字yield有什么作用

    python中,yield关键字的作用:1.将一个函数修改为生成器,利用生成器可以有效地节约系统资源,避免不必要的内存占用:2.用于定义上下文管理器:3.协程:4.配合from形成yield from ...

  8. python中sorted函数的作用_Python中排序方法sort、函数sorted的key参数的作用分析

    从Python2.4开始,list.sort方法 和 sorted方法 都增加了一个 'key' 参数用来在进行比较之前指定每个列表元素上要调用的函数,将函数的返回值作为比较的依据. 那么怎么使用这个 ...

  9. python语言中print函数的作用_python中print()方法有什么

    python中print()方法有什么 发布时间:2020-11-11 13:50:08 来源:亿速云 阅读:91 作者:小新 这篇文章给大家分享的是有关python中print()方法有什么的内容. ...

最新文章

  1. 121.买卖股票的最佳时机
  2. Windows下在Django中创建项目时ImportError: No module named django.core解决方法
  3. [HNOI2008]玩具装箱toy
  4. js 为什么0.1+0.2不等于0.3
  5. 【JavaScript】正则表达式
  6. 三行代码让你的博客访问量上百万
  7. 如何使用 tf object detection
  8. Spring整合web开发
  9. .NET Core实战项目之CMS 第八章 设计篇-内容管理极简设计全过程
  10. 【51单片机快速入门指南】1:基础知识和工程创建
  11. 矩阵特征值和特征向量详细计算过程(转载)
  12. Robotium导入被测源码遇到问题 had used a different Landroid/support/v4/view/ViewPager
  13. 【CSRF-01】跨站请求伪造漏洞基础原理及攻防
  14. pdf文件转为md文件
  15. 一些企业个人网银的U盾或是usbkey在web(IE)网页中无法使用的解决方法
  16. 一键搭建asp php mysql_一键快速搭建Apache+PHP+MySQL+ASP平台(二)
  17. ORA-00257: archiver error. Connect internal only, until freed 错误解决方案
  18. 数学家西蒙斯:华尔街最赚钱的基金经理
  19. PID闭环控制算法解析(最透彻)
  20. 计算机学习常用网站总结

热门文章

  1. 1.1.3 以类为单位的编程思想
  2. Linux下Apache+Tomcat 负载均衡
  3. 从强制卸载Office到强制安装WPS
  4. spring MVC做form提交Neither BindingResult nor plain target object for bean name 'command' available...
  5. macOS 开启 VNC 远程桌面和 SSH 服务
  6. xpath定位中starts-with、contains和text()的用法
  7. crm创建和编辑全局选项集
  8. 这种事都有?建行网银把Demo版的放上线了?!
  9. 怎么装python解析器_linux 下安装 python 解析器
  10. mysql ef6 事务_使用事务-EF6 | Microsoft Docs