14.python-lambda函数
python-lambda函数
lambda 基本语法
lambda函数的基本语法形式是 lambda 参数:表达式。
lambda函数并不需要函数名,也就是我们所说的“匿名”的含义。这使得我们可以在代码的任何地方快速定义一个函数。
下面的代码展示了如何使用lambda函数。
add = lambda x, y: x + y
print(add(5, 3)) # 输出: 8
lambda函数一般功能简单:单行expression决定了lambda函数不可能完成复杂的逻辑,只能完成非常简单的功能。由于其实现的功能一目了然,甚至不需要专门的名字来说明。
下面是一些lambda函数示例:
- lambda x, y: x+y; 函数输入是x和y,输出是它们的积x+y
- lambda:None; 函数没有输入参数,输出是None
- lambda *args: sum(args); 输入是任意个数的参数,输出是它们的和(隐性要求是输入参数必须能够进行加法运算)
- lambda **kwargs: 1; 输入是任意键值对参数,输出是1
lambda与map高阶函数
高阶函数是指那些接受函数作为参数或返回函数作为输出的函数。
在Python中,常见的高阶函数有map()
、filter()
、reduce()
等。
lambda函数经常和这些高阶函数一起使用,达到简洁明了的效果。
比如下面这个例子,我们使用map()
函数和lambda函数,快速实现了一个将列表中所有元素翻倍的操作:
numbers = [1, 2, 3, 4, 5]
doubled = map(lambda x: x * 2, numbers)
print(list(doubled)) # 输出: [2, 4, 6, 8, 10]
lambda与filter高阶函数
filter()
函数是Python的另一个常见高阶函数,它接受一个函数和一个可迭代对象作为参数,并返回一个新的可迭代对象,
新的可迭代对象中的元素都是原可迭代对象中使得函数返回值为True的元素。
下面我们来看一个使用filter()
函数和lambda函数,实现数据的过滤。
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = filter(lambda x: x % 2 == 0, numbers)
print(list(even_numbers)) # 输出: [2, 4, 6]
lambda与reduce高阶函数
from functools import reduce
def add_z(x,y):
return x+y
r_z=reduce(add_z,range(1,10))
print(r_z)
print(f"r_z 的类型:{type(r_z)}, add end:{r_z}")
Lambda函数在排序中的应用
在Python的sort()
或sorted()
函数中,我们可以用lambda函数作为key参数,根据自定义的规则进行排序。
对列表进行排序
fruits = ['banana', 'apple', 'cherry', 'lime', 'mango']
fruits_sorted = sorted(fruits, key=lambda x: len(x))
print(fruits_sorted) # 输出: ['lime', 'apple', 'mango', 'cherry', 'banana']
对字典进行排序
fruits={'banana': 1, 'apple': 3, 'cherry': 4, 'lime': 5, 'mango':2}
sorted_map = sorted(fruits.items(), key=lambda x: x[1],reverse=True)
fruits={key:value for key,value in sorted_map}
print(fruits)
# 执行结果
{'lime': 5, 'cherry': 4, 'apple': 3, 'mango': 2, 'banana': 1}
最大最小值
d = {'banana':23,'apple':18,'cherry':20,'lime':25}
ans = max(d.items (),key=lambda x:x[1])
print('数值最大为 {}:{}'.format(ans[0],ans[1]))
# 执行结果
数值最大为 lime:25
将函数作为参数传递给高阶函数
def testfunc(num):
return lambda x : x * num
result1 = testfunc(10)
result2 = testfunc(20)
print(result1(9))
pritn(result2(9))