Lambda表达式简单来说就是定义了一个简单的匿名函数,使用这种方式可以简化编程,使程序更加"pythonic"(当然,这也是存在争议的)
简单的例子:
add = lambda x,y : x+y
add(1,3) # 4
就相当于一个小函数,大部分情况下,是不会像这样定义名称的,一般像下面这样定义一个可能只是使用一次而且非常简单的函数,就会使用lambda表达式(当然这个例子使用列表解析式会更方便):
In [13]: a
Out[13]: [0, 1, 2, 3, 4]
In [14]: list(map(lambda x:x*x, [i for i in a]))
Out[14]: [0, 1, 4, 9, 16]
主要使用情况
- Python中很多地方都支持函数式编程,例如map,filter, sorted等等,都可以将函数作为参数传入,lambda表达式一般配合这些函数使用:
In [33]: a = np.random.randint(-10, 10, 6) # 随机生成数组
In [34]: a
Out[34]: array([-10, -9, -6, 9, 3, -4])
In [35]: sorted(a, key=lambda x:abs(x)) # 按照绝对值大小排序 使用lambda表达式简化key函数
Out[35]: [3, -4, -6, -9, 9, -10]
- 另一个应用就是闭包计算
例如:
使用普通函数进行处理:
In [43]: def get_y(a,b):
...: def fun(x):
...: return a*x + b
...: return fun
...:
...:
In [44]: y1 = get_y(1,1)
In [45]: y1(1)
Out[45]: 2
使用lambda表达式进行简化:
In [40]: def get_y(a,b):
...: return lambda x : a*x + b
...:
...:
In [41]: y1 = get_y(1,1)
In [42]: y1(1)
Out[42]: 2
此外,lambda表达式的参数形式与函数是一致的,例如:
- 有明确个数的参数
- 没有输入参数
- 有不确定个数的输入参数:
In [46]: func = lambda *x : sum(x) # 不确定参数个数的lambda表达式
In [47]: func(1,2,3,4)
Out[47]: 10
还有可以传入关键值参数
Lambda表达式的基本使用就这样,Lambda在大部分情况下只是作为替代无需定义的简单函数,如果涉及了复杂的逻辑,自然最好还是使用正常的函数定义方式。
以上~