匿名函数Lambda

匿名函数 lambda

与def一样,lambda表达式也是创建了一个之后可以调用的函数,但是它返回的是函数本身,而不是将其赋值给一个变量名。这也是lambda称为匿名函数的原因。

lambda表达式

lambda argument1, argument2, ... argumentN : expression using arguments

lambda的一般形式:关键字lambda后面跟上一个或多个参数(与一个def头部内用括号括起来的参数列表极其相似),之后是一个冒号,再之后是表达式。

  1. lambda是一个表达式,而不是语句。因为这一点,lambda可以出现在Python语法不允许def出现的地方。例如在一个列表字面量中或者函数调用参数中。def语句总是要在其它地方创建,并头部将一个新的函数赋值给一个名称(变量variable),lambda函数直接返回一个值(一个新的函数),也可以选择性地被赋值给一个变量名。
  2. lambda的主体是一个单独的表达式,而不是一个代码块。lambda的主体简单的就像def主体的return语句中的代码一样。由于lambda局限于一个表达式中,因此lambda通常要比def功能小。只能在lambda主体中封装有限的逻辑,if语句不能用目的是限制程序的嵌套。lambda是为了编写简单函数而设计的。

为什么使用lambda?

通常来说,lambda起到一种函数速写作用,可以在使用它的代码中嵌套一个函数定义。此外,每次使用def代码,都需要占用临时性函数名称(可能同其他名称相冲突),而想用的函数定义也会位于要使用的上下文外。

Example

  1. lambda可以在列表字面量中工作,而def则不能。
#lambda
>>> L = [lambda x: x**2, lambda x: x**3, lambda x: x**4]
>>> for f in L:
    print(f(2))
#def
>>> def f1(x): return x**2
>>> def f2(x): return x**3
>>> def f3(x): return x**4

>>> L = [f1, f2, f3]
>>> for f in L:
    print(f(2))
  1. lambda可以在函数调用参数中使用。
>>> sorted(range(-5, 6), key=lambda x: x ** 2)
[0, -1, 1, -2, 2, -3, 3, -4, 4, -5, 5]

>>> students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
>>> sorted(students, key=lambda s: s[2])            # 按年龄排序
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

参考文献

Python sorted() 函数
Lambda Function in Python: What are they good for?
Python学习手册第五版

Date: 2019 10 15

你可能感兴趣的:(匿名函数Lambda)