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函数的主要特性及用户,其中reduce
、map
、filter
结合lambda
函数的使用在真实编程工作非常高频。
希望大家能反复阅读,体会lambda函数的精妙,一旦掌握,one line code to finish many things!
如果你觉得这篇文章对你有帮助,欢迎大家点赞、收藏、支持!。
pythontip 出品,Happy Coding!
公众号: 夸克编程