Python - Lambda表达式

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在大部分情况下只是作为替代无需定义的简单函数,如果涉及了复杂的逻辑,自然最好还是使用正常的函数定义方式。

以上~

猜你喜欢

转载自blog.csdn.net/sinat_34328764/article/details/82869480
今日推荐