Python 中的lambda函数也叫匿名函数,即,没有具体的名称。lambda的主题是一个表达式,而不是一个代码块,仅仅能在lambda表达式中封装有限的逻辑。
我们拿正常的定义函数的方式来做比较:
def f(x): return x**2 print f(4) # result 16
g = lambda x : x**2 print g(4) # result 16
最主要的作用:
1. 使用Python写一些执行脚本的时候,可以用lambda省去写定义函数的过程,使得代码更加精简。
2. 对于一些抽象的, 不会用在别的地方重复使用的函数,起名称有一定难度的方法,可以使用lambda不需要考虑命名的问题。
3. 使用lambda某些时候让代码更加容易理解。
4. lambda会创建一个函数对象,但不会把函数对象赋给一个标示符,而定义函数会把函数对象赋值给一个变量。
lambda基础
lambda语句中,冒号前是参数,可以有多个,用逗号隔开,冒号右边是返回值。
g = lambda x : x**2 print g # result <function <lambda> at 0x0000000001FA7358>
def action(x): return lambda y: x+y a = action(2) print a(22) # result 24
a是action函数的返回值,即,lambda表达式
a(22),即,调用了action的返回lambda表达式
如果全用lambda写的话
b = lambda x: lambda y: x+y a = b(2) print a print a(22) # result <function <lambda> at 0x0000000001F673C8> 24
Python中有很多定义好的全局函数可以和lambda配合使用
foo = [2, 18, 9, 22, 17, 24, 8, 12, 27] print filter(lambda x: x % 3 == 0, foo) print map(lambda x: x * 2 + 10, foo) print reduce(lambda x, y: x + y, foo) # result [18, 9, 24, 12, 27] [14, 46, 28, 54, 44, 58, 26, 34, 64] 139
就上述的map的例子,我们并不一定要用lambda,可以写成:
print [x * 2 + 10 for x in foo]
print [x for x in foo if x % 3 == 0]
lambda中全局变量的概念
创建一个函数数组fs = [f0,...,f9] where fi(n) = i + n, 于是:
fs = [(lambda n: i + n) for i in range(10)]
>>> fs[3](4) # 应该是7 13 >>> fs[4](4) # 8 13 >>> fs[5](4) # 9 13
不用lambda的代码版本应该如下:
i = 1 def fs(n): return n + i print fs(1) # 2 i = 2 print fs(1) # 3
fs = [(lambda n, i=i : i + n) for i in range(10)] >>> fs[3](4) 7 >>> fs[4](4) 8 >>> fs[5](4) 9
参考:
http://blog.csdn.net/xiaobei4929/article/details/10530723
http://www.cnblogs.com/qq78292959/archive/2013/05/07/3064438.html
http://math.andrej.com/2009/04/09/pythons-lambda-is-broken/
http://www.secnetix.de/olli/Python/lambda_functions.hawk
原文:http://blog.csdn.net/bearkino/article/details/41082333