python进阶系列 - 08 lambda 函数

92 阅读3分钟

lambda 函数是一个小(一行)匿名函数,它没有名称定义。 lambda 函数可以采用任意数量的参数,但只有一个表达式。 普通函数是使用 def 关键字定义的,而在 Python 中匿名函数是使用 lambda 关键字定义的。

lambda arguments: expression 当一个简单函数在您的代码中仅使用一次或短时间使用时,建议使用 Lambda 函数。 它最常见的用途是作为高阶函数的参数。 比如与 map()filter()reduce() 等内置函数一起使用。

先看一个代码:

# 一个添加10到输入参数的lambda函数
f = lambda x: x + 10
val1 = f(5)
val2 = f(100)
print(val1, val2)  # 15 110

# 一个乘以两个输入参数的lambda函数
f = lambda x, y: x * y
val3 = f(2, 10)
val4 = f(7, 5)
print(val3, val4)  # 20 25

输出:

15 110
20 35

函数内使用lambda

依据自己的需求:从函数中创建的自定义lambda函数,并返回lambda函数。

代码:

def myfunc(n):
    return lambda x: x * n  # 返回lambda函数


doubler = myfunc(2)
print(doubler(6))  # 12
tripler = myfunc(3)
print(tripler(6))  # 18

输出:

12
18

lambda函数作为排序参数

这个函数的作用是将字典的键和值转换为一个元组,然后按照元组的第二个元素排序。

代码:

points2D = [(1, 9), (4, 1), (5, -3), (10, 2)]
sorted_by_y = sorted(points2D, key=lambda x: x[1])
print(sorted_by_y)

mylist = [- 1, -4, -2, -3, 1, 2, 3, 4]
sorted_by_abs = sorted(mylist, key=lambda x: abs(x))
print(sorted_by_abs)

结果:

[(5, -3), (4, 1), (10, 2), (1, 9)]
[-1, 1, -2, 2, -3, 3, -4, 4]

map 和 lambda

语法: map(func, seq)。将函数map作用于序列seq的每个元素,并返回一个新的序列。

代码:

a = [1, 2, 3, 4, 5, 6]
b = list(map(lambda x: x * 2, a))  # 每个元素乘以2

c = [x * 2 for x in a]  # 列表推导语法
print(b)
print(c)

输出:

[2, 4, 6, 8, 10, 12]
[2, 4, 6, 8, 10, 12]

filter 和 lambda

语法:filter(func, seq)。将函数func作用于序列seq的每个元素,过滤不满足条件的元素,并返回一个新的序列。

示例代码:

a = [1, 2, 3, 4, 5, 6, 7, 8]
b = list(filter(lambda x: (x % 2 == 0), a))  # 返回偶数,即x%2 == 0

c = [x for x in a if x % 2 == 0]  # 功能类似,但使用列表推导语法
print(b)
print(c)

输出:

[2, 4, 6, 8]
[2, 4, 6, 8]

reduce 和 lambda

语法:reduce(func, seq)。将函数func作用于序列seq的每个元素,并返回一个值。 其中func接收两个参数,第一个参数是上一次调用 func 时返回的结果,第二个参数是序列的下一个元素。

示例代码:

from functools import reduce

a = [1, 2, 3, 4]
product_a = reduce(lambda x, y: x * y, a)
print(product_a)  # 24,相当于1*2*3*4

sum_a = reduce(lambda x, y: x + y, a)
print(sum_a)  # 10,相当于1+2+3+4

结果:

24
10

总结

本文简要介绍了lambda函数的主要特性及用户,其中reducemapfilter结合lambda函数的使用在真实编程工作非常高频。

希望大家能反复阅读,体会lambda函数的精妙,一旦掌握,one line code to finish many things!

如果你觉得这篇文章对你有帮助,欢迎大家点赞、收藏、支持!。

pythontip 出品,Happy Coding!

公众号: 夸克编程