1 lambda 函数简介
匿名函数 lambda 和常规函数一样,返回的都是一个函数对象(function object)
def square(x):
return x**2
# 可以写成
def square(x): return x**2
# 简化:省略掉函数名,return关键字也减掉
lambda x: x**2
square = lambda x: x**2
square(3)
输出:
9
lambda 表达式的格式
lambda argument1, argument2,... argumentN : expression
匿名函数 lambda 和常规函数用法相似,但有以下几点区别:
1 lambda 是一个表达式(expression),并不是一个语句(statement)
- 所谓的表达式,就是用一系列“公式”去表达一个东西,比如x + 2、 x**2等等
- 而所谓的语句,则一定是完成了某些功能,比如赋值语句x = 1完成了赋值,print 语句print(x)完成了打印,条件语句 if x < 0:完成了选择功能等等
因此,lambda 可以用在一些常规函数 def 不能用的地方,比如,lambda 可以用在列表内部,而常规函数却不能
[(lambda x: x*x)(x) for x in range(10)]
# 输出
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
再比如,lambda 可以被用作某些函数的参数,而常规函数 def 也不能:
l = [(1, 20), (3, 0), (9, 10), (2, -1)]
l.sort(key=lambda x: x[1]) # 按列表中元组的第二个元素排序
print(l)
# 输出
[(2, -1), (3, 0), (9, 10), (1, 20)]
2 lambda 是一个表达式(expression),并不是一个语句(statement)
Python 之所以发明 lambda,就是为了让它和常规函数各司其职:lambda 专注于简单的任务,而常规函数则负责更复杂的多行逻辑。
2 为何使用 lambda 函数
理论上来说,Python 中有匿名函数的地方,都可以被替换成等价的其他表达形式。一个 Python 程序是可以不用任何匿名函数的。不过,在一些情况下,使用匿名函数 lambda,可以帮助我们大大简化代码的复杂度,提高代码的可读性。
如果你需要一个函数,但它非常简短,只需要一行就能完成;同时它在程序中只被调用一次而已。这样就可以不用写函数直接使用lambda表达式
举个例子,如果你想对一个列表中的所有元素做平方操作,而这个操作在你的程序中只需要进行一次,用 lambda 函数可以表示成下面这样,对比之下lambda 函数让代码更加简洁明了:
# lambda 表达式
squared = map(lambda x: x**2, [1, 2, 3, 4, 5])
# 常规函数
def square(x):
return x**2
squared = map(square, [1, 2, 3, 4, 5])
函数 map(function, iterable) 的第一个参数是函数对象,第二个参数是一个可以遍历的集合,它表示对 iterable 的每一个元素,都运用 function 这个函数。