Lambda() 和 Map() | Python

    技术2022-07-10  93

    Lambda 是一种匿名函数,一般而言,Lambda 函数都比较小,它也不需要定义函数名。那么为什么需要匿名函数?简单而言,Lambda 最常执行一些直观的运算,它并不需要标准的函数定义,而且也不需要新的函数名再次调用。 我们先定义一个简单的函数,它会算变量的平方并加 5:

    >>> def stupid_func(x): >>> return x**2 + 5

    现在我们可以试试 Lambda 匿名函数:

    >>> stupid_func = (lambda x : x ** 2 + 5) >>> print([stupid_func(1), stupid_func(3), stupid_func(5)]) [6, 14, 30]

    那么我们为什么要用上面的表达式?很大一部分原因在于,当我们想执行一些简单运算时,可以不需要定义真实函数就能完成。例如排序列表元素,一种直观的方法可以使用 sorted() 方法:

    >>> my_list = [2, 1, 0, -1, -2] >>> print(sorted(my_list)) [-2, -1, 0, 1, 2]

    这只能默认从大到小或从小到大排序,但是借助 Lambda 表达式,我们可以实现更自由的排序标准。如下所示我们希望根据最小的平方数对列表进行排序,其可以使用 Lambda 函数定义键,从而告诉 sorted() 方法该怎样排序。

    >>> print(sorted(my_list, key = lambda x : x ** 2)) [0, -1, 1, -2, 2]

    Map 是一个简单的函数,它可以将某个函数应用到其它一些序列元素,例如列表。如果我们有两个列表,我们希望将这两个列表对应的元素相乘,那么使用 lambda 函数和 map 可以快速实现这一功能:

    >>> print(list(map(lambda x, y : x * y, [1, 2, 3], [4, 5, 6]))) [4, 10, 18]

    上面的代码非常优雅,如果不用它们两者,那么一般的表达需要写成这样:

    >>> x, y = [1, 2, 3], [4, 5, 6] >>> z = [] >>> for i in range(len(x)): >>> z.append(x[i] * y[i]) >>> print(z) [4, 10, 18]
    Processed: 0.030, SQL: 9