lambda表达式生成了一个函数,最后返回这个函数,不像def语句最后把函数对象赋值给了变量名,这也是lambda函数成为匿名函数的原因(没有变量名)
lambda表达式:
lambda argument1,... : expression
注意:
lambda 是以个表达式,而不是一个语句
lambda 的主体是一个单个表达式,而不是一个代码块,lambda主体中不能使用if语句
默认参数也能在lambda表达式中使用:
func = lambda x='a', y='b', z='c': x+y+z
func()
使用的例子:
1.模拟print函数
import sys
ff = lambda x: sys.stdout.write(x + '/n')
ff()
2.使用if/else 三元表达式,实现嵌套逻辑
ff = lambda x,y : x if x>y else y
ff(x,y)
3.在lambda使用map,列表解析
ff = lambda x: map(sys.stdout.write, x)
t = ff(['spam\n', 'totast\n', 'eggs\n'])
f2 = lambda x: [sys.stdout.write(y) for y in x]
tt = f2(['spam\n', 'totast\n', 'eggs\n'])
嵌套lambda和作用域
lambda表达式能够使用上层函数中的变量
def action(x):
return lambda y: x*y
act = action(4)
act(5)
action = lambda x: (lambda y: x*y)
act =action(4)
act(5)