• 在计算机编程中,匿名函数(英语: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]
    >>>
    

    参考