咱们从一个例子引入。java
这里有一个元素为非空字符串的列表,按字符串最后一个字母将列表进行排序。若是原列表是 ['abc', 'g', 'def'],则结果应该是 ['abc', 'def', 'g']。python
很容易获得以下代码函数
咱们发现, get_last_element 这个方法比较简单,而且只用了一次,但必须定义后获得一个名称才能使用。在上面的情境中,使用起来稍微麻烦了点,咱们能不能直接定义了就用呢?固然能够。.net
使用很简单,有以下几个关键点视频
使用 lambda 关键字
自动 return,不须要你本身写
只有一行代码
知道了上面的内容,匿名函数的概念也大体清晰了。对象
知道了匿名函数后,咱们在开发的时候有时候不经意就把这个东西滥用了。blog
PEP 8 中建议咱们不要写相似下面的代码排序
匿名函数能够直接当作变量同样传递,好比传给函数做为参数,并不要求它必定有个名字。element
须要注意的是,其实上面的操做并无真正起到给函数命名的做用。开发
若是须要给定义的函数命名,使用 def 关键字便可
经过 def 定义的函数才是真正有名称的,匿名函数的名称永远是 lambda
某些时候,咱们没有使用匿名函数的必要,但却无心中使用了。
通常有两种状况。一是使用无心义的调用,好比下面的代码
将列表按元素的长度进行排序。
其实,咱们能够直接这样
上面的一提出来你们立刻就理解了,可是平时咱们却或多或少的犯了相似的毛病。
另外一方面,有不少函数,标准库中都已经实现了,咱们不知道,因此作了多余的事情。
好比这里
这里的匿名函数能够直接用 mul 函数替换
Python 的 operator 模块提供了不少经常使用的操做,熟悉了后,你会慢慢喜欢上它的。里面除了算术、比较等操做,关于对字典、对象的操做也值得一提。
itemgetter 函数,根据键获取字典的值
attrgetter 函数,根据属性获取对应值
按元素的长度和字典序对列表进行排序
上面的代码可以实现功能,可是我以为下面的可读性更强一些
咱们经过函数函数名就大概知道了函数的做用,若是是匿名函数的话,咱们还得去看相应的逻辑。
对一个列表进行求和,咱们可能会看到这样的代码
其实,直接使用 sum 函数就好了
对于一些特定的需求,不少时候 Python 可能已经有了现成的方案。咱们要有这方面的意识,尽量简单的去解决问题。
Python 中的 map 和 filter 通常都结合匿名函数在使用,前者是在迭代过程当中对元素作一些处理,后者是过滤掉一些元素。不少状况下,咱们可使用列表推导式或者生成器表达式代替它们。
用生成器表达式代替 map
用生成器表达式代替 filter
明显的能够看出,使用生成器表达式的代码可读性更强一些。
说了这么多匿名函数使用的误区,那么何时使用比较合理呢?我以为知足下面的几个点,就能够考虑考虑了。
只用一次
函数逻辑简单
使用匿名函数前尽量的肯定 Python 没有自带相似功能的函数
原文连接:
https://blog.csdn.net/sinat_38682860/article/details/83867671
识别图中二维码,领取python全套视频资料