Python lambda 匿名函数

在计算机编程中,匿名函数(英语:anonymous function)是指一类无需定义标识符(函数名)的函数或子程序,普遍存在于多种编程语言中。

在Python中,我们可以通过使用lambda表达式来创建匿名函数,lambda函数的语法也非常简单:

lambda argument_list:expression

参数由逗号分隔的参数列表组成,表达式是使用这些参数的算术表达式且只能有一个,即不用写return。您可以将该函数分配给一个变量以赋予其名称。

匿名函数的好处在于它没有名字,所以你不用担心变量名会起冲突。

下面的lambda函数示例返回其两个参数的总和:

>>> sum = lambda x,y:x + y
>>> sum(3,4)
7
>>>

将上面的代码写成一般的函数表达式是这样的:

>>> def sum(x,y):
...     return x + y
...
>>> sum(3,4)
7
>>>

map()函数

map()是一个带有两个参数的函数,它接受一个函数和一个列表,然后将列表中的每一项都应用于该函数中,map()函数也被称为迭代器。

例如我们通过map()函数计算一个列表中每一项的平方,可以直接在map()中传入一个匿名函数(lambda)

>>> list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
[1, 4, 9, 16, 25, 36, 49, 64, 81]

下面有一个更直观的例子让你看到它的优点:

>>> def fahrenheit(T):
...     return ((float(9)/5)*T + 32)
...
>>> def celsius(T):
...     return (float(5)/9)*(T-32)
...
>>> temperatures = (36.5, 37, 37.5, 38, 39)
>>> F = map(fahrenheit, temperatures)
>>> C = map(celsius, F)
>>>
>>> temperatures_in_Fahrenheit = list(map(fahrenheit, temperatures))
>>> temperatures_in_Celsius = list(map(celsius, temperatures_in_Fahrenheit))
>>> print(temperatures_in_Fahrenheit)
[97.7, 98.60000000000001, 99.5, 100.4, 102.2]
>>> print(temperatures_in_Celsius)
[36.5, 37.00000000000001, 37.5, 38.00000000000001, 39.0]
>>>

上面是一个计算华氏度和摄氏度的例子,在下面,我们使用lambda匿名函数来重写,你可以看到整个代码瞬间简洁了不少。

>>> C = [39.2, 36.5, 37.3, 38, 37.8]
>>> F = list(map(lambda x: (float(9)/5)*x + 32, C))
>>> print(F)
[102.56, 97.7, 99.14, 100.4, 100.03999999999999]
>>> C = list(map(lambda x: (float(5)/9)*(x-32), F))
>>> print(C)
[39.2, 36.5, 37.300000000000004, 38.00000000000001, 37.8]
>>>

参考