lambda函数
来源:互联网 发布:淘宝网元领小衫 编辑:程序博客网 时间:2024/05/17 15:17
lambda函数又叫匿名函数,也就是说函数没有具体的名字。先看一个最简单的例子:
def f(x): return x**2print f(4)
如果用lambda来实现的话,需要写成如下的函数:
g = lambda x : x**2print g(4)
lambda函数到底有什么用呢?很多人提出了质疑,lambda与普通函数相比就是省去了函数名称而已,同时这样的匿名函数又不能共享在其他地方调用。其实,lambda还是有以下用处的:
1、使用Python写一些执行脚本时,使用lambda可以省去定义函数的过程,简洁代码。
2、对于一些抽象的,不需要在别的地方复用的函数,有时候给函数起名也是一个困难的事情,此时lambda是一个不错的选择。
3、使用lambda函数让代码更加容易理解。
lambda基础
lambda语句中,冒号前是参数,可以有多个,用逗号隔开,冒号右边的返回值。lambda语句构建的其实是一个函数对象,见证一下:
g = lambda x : x**2print g<function <lambda> at 0x00AFAAF0>
非lambda不可?
Python是否非要使用lambda才能做到这样的简洁程度呢?在对象遍历处理方面,其实Python的for..in..if语法已经很强大,并且在易读上胜过了lambda。
print [x * 2 + 10 for x in foo]print [x for x in foo if x % 3 == 0]
其实,这两种情况都要比lambda容易理解。
所以,什么时候使用lambda,什么时候不用,需要具体情况具体分析,只要表达的意图清晰就好。一般情况下,如果for..in..if能做的,我都不会选择lambda。
lambda broken?
在数学教学中,经常会使用到lambda,比如有一位老兄就遇到这样一个问题。他想创建一个函数数组fs=[f0,...,f9] where fi(n)=i+n. 于是乎,就定义了这么一个lambda函数:
fs = [(lambda n: i + n) for i in range(10)]
但是,奇怪的是,
>>> fs[3](4)13>>> fs[4](4)13>>> fs[5](4)13
结果并没有达到这位老兄的预期,预期的结果应该是:
>>> fs[3](4)7>>> fs[4](4)8>>> fs[5](4)9
问题其实出在变量i上。上面的代码换个简单的不使用lambda的缩减版本:
i = 1def fs(n): return n + iprint fs(1) # 2i = 2print fs(1) # 3
可见,上面没有达到预期的原因是lambda中的i使用的是匿名函数外的全局变量。修改一下:
fs = [(lambda n, i=i : i + n) for i in range(10)]>>> fs[3](4)7>>> fs[4](4)8>>> fs[5](4)9
0 0
- lambda函数
- lambda函数
- Lambda函数
- lambda函数
- lambda函数
- lambda函数
- Lambda函数
- lambda函数
- lambda函数
- lambda函数
- lambda函数
- lambda函数
- lambda函数
- lambda函数,匿名函数
- Python: 使用lambda函数
- 使用 lambda 函数
- lambda函数体转换
- Python的lambda函数
- 加强版Cheat Engine之Samuel Engine
- neutron在network-node上安装出错. remote error
- Linux shell脚本的建立与执行
- 写数据到文件,并同步写到磁盘
- 一分钟读懂马云在互联网大会的万字
- lambda函数
- 综合:解决Android中Handler警告、SimpleDateFormat警告、"String".toUpperCase()警告
- hdu 975 关于521
- 苹果开发基础——NSArray排序
- 求n^nd的根
- MFC下CListCtrl的使用笔记
- c++著名库
- 一个x86平台的spi flash驱动移植笔记
- 表情,文字 图文混编