《Python编程的术与道:Python语言入门》视频课程
《Python编程的术与道:Python语言入门》视频课程链接:https://edu.csdn.net/course/detail/27845
Lambda函数是没有名称的in-line函数。它通常被称为匿名函数。
lambda函数的功能与普通函数完全相同,不同之处在于:lambda仅包含一个表达式
def doubler(x): return x*2 print(doubler(2)) # 4 print(doubler(5)) # 10
4 10
你可以使用lambda函数获得相同的结果。
doubler = lambda x: x*2 print(doubler(2)) # 4 print(doubler(5)) # 10
4 10
你可以向lambda函数发送任意数量的参数。 只需用逗号将它们分开。
示例:将两个值相乘的lambda函数
mul = lambda x, y: x*y print(mul(2, 5))
10
示例:一个将三个值相加的lambda函数
add = lambda x, y, z: x+y+z print(add(2, 5, 10))
17
可以为参数指定默认值。
当调用不带参数的lambda函数时,它将使用默认值。
示例:默认情况下将值递增1的lambda函数
incrementer = lambda x, y=1: x+y print(incrementer(5, 3))
8
# using default print(incrementer(5))
6
要返回多个值,可将它们打包在一个元组中。
然后使用多个赋值来拆包返回的元组的各个部分。
示例:通过将它们打包到一个元组中来返回多个值
findSquareCube = lambda num: (num**2, num**3) print(type(findSquareCube)) x, y = findSquareCube(2) print(x) print(y)
<class 'function'> 4 8
要在lambda中实现选择逻辑,可以使用if else三元表达式。
示例:返回最小元素的lambda函数
findMin = lambda x, y: x if x < y else y print(findMin(2, 4)) # 2 print(findMin('a', 'x')) # a
2 a
可以在lambda函数中使用列表推导。
示例:使用lambda展平一个嵌套列表
flatten = lambda l: [item for sublist in l for item in sublist] L = [[1, 2, 3], [4, 5, 6], [7], [8, 9]] print(flatten(L)) # [1, 2, 3, 4, 5, 6, 7, 8, 9] L = [['a', 'b', 'c'], ['d', 'e']] print(flatten(L)) # ['a', 'b', 'c', 'd', 'e']
[1, 2, 3, 4, 5, 6, 7, 8, 9] ['a', 'b', 'c', 'd', 'e']
Lambda函数可与sorted()
函数一起使用,以对可迭代对象进行排序。
示例:根据学生年龄对元组列表进行排序
L = [('Sam', 35), ('Max', 25), ('Bob', 30)] x = sorted(L, key=lambda student: student[1]) print(x) # [('Max', 25), ('Bob', 30), ('Sam', 35)]
[('Max', 25), ('Bob', 30), ('Sam', 35)]
像普通函数一样,lambda也可以嵌套。
示例:嵌套Lambda
multiplier = (lambda x: (lambda y: x*2 + y)) doubler = multiplier(2) print(doubler(10)) # 14 tripler = multiplier(3) print(tripler(10)) # 16
14 16
lambda也通常用于实现跳转表(jump tables)。
跳转表是要按需调用的函数的列表或字典。
示例:在python中创建平方和立方运算的跳转表
# dictionary of functions exponent = {'square':lambda x: x ** 2, 'cube':lambda x: x ** 3} print(exponent['square'](3)) # 9 print(exponent['cube'](3)) # 27 # list of functions exponent = [lambda x: x ** 2, lambda x: x ** 3] print(exponent[0](3)) # 9 print(exponent[1](3)) # 27
9 27 9 27