十九、深入 Python 匿名函数
@Author: Runsen
匿名函数是没有函数声明def
的函数,用lambda关键字定义的函数。匿名函数的定义方式也和普通函数不一样,代码比较简洁。
@[toc]
匿名函数
匿名函数不需要显示地定义函数名,使用【lambda + 参数 +表达式】
的方式
lambda 函数
比如,将最简单的平方函数改造成匿名函数
lambda 函数的形式
关于lambda
参数的解读:
关键字lambda表示匿名函数,冒号前面的x表示函数参数(可以没有或者是多个)
冒号后边是表达式,在匿名函数中有且只能有一个
匿名函数不用写return,表达式本身结果就是返回值
匿名函数怎么调用,lambda 返回的一个函数对象,只要传入参数,即可调用。
为什么说lambda代码比较简洁,lambda是一个表达式,将def函数三行写在一起。
上面代码对应的def函数如下。
使用lambda最常见的方法就是对元祖列表,嵌套列表,字典进行排序。比如,下面的代码。
在tkinter 中,也有对应实现的简单案例,下面代码实现的功能:主要你按压就出现being pressed
主要你按压'This is a button',就打印being pressed。
如果用def就是下面的样子
纯函数
对于纯函数这个概念,我是了解极客时间专栏《Python核心技术与实战》才知道的。
函数式编程是指代码每一块都是不可变的,都是由纯函数的组成
这里的纯函数,值函数本身相互独立,对于相同的输入都有相同的输出,但是不改变输入的元素。
比如,传入一个列表将列表的元素变为原来的2倍
上面这段代码不是纯函数的形式,因为经过多次调用,每次得到的结果不一样,因为l
本质上发生了改变。
上面这段代码才是纯函数的形式,在函数里面定义一个新的列表,每次得到的结果都一样,因为l
本质上没有发生了改变。
其他函数
lambda返回的值,结合map,filter,reduce使用。
下面实例中的map、reduce、filter都是Python内置的高阶函数,
map
map 函数的形式
第一个参数是函数的对象,第二个是一个可迭代对象。具体示例如下。
filter
filter通常对一个集合做过滤的操作。具体示例如下。
reduce
reduce通常对一个集合做累积的操作,需要引用functools
模块。(只针对Python3而言,在Python2中reduce是内置函数)
注意:无论是map还是filter返回的都是对象,需要对其进行列表转化。reduce在python3中已经放进functools模块中了
思考题: 如何将字典根据值来排序
参考:https://time.geekbang.org/column/article/98411
今天也学到了很多东西呢,明天有什么新知识呢?真期待鸭~如果喜欢文章可以关注我哦~
本文已收录 GitHub,传送门~ ,里面更有大厂面试完整考点,欢迎 Star。
版权声明: 本文为 InfoQ 作者【刘润森】的原创文章。
原文链接:【http://xie.infoq.cn/article/af2efad1a565e06479c8f76e1】。未经作者许可,禁止转载。
评论