Python lambda(匿名函数)
Python 使用 lambda 来创建匿名函数。
lambda 函数是一种小型、匿名的、内联函数,它可以具有任意数量的参数,但只能有一个表达式。
匿名函数不需要使用 def 关键字定义完整函数。
lambda 函数通常用于编写简单的、单行的函数,通常在需要函数作为参数传递的情况下使用,例如在 map()、filter()、reduce() 等函数中。
lambda 函数特点
- lambda 函数是匿名的,它们没有函数名称,只能通过赋值给变量或作为参数传递给其他函数来使用。
- lambda 函数通常只包含一行代码,这使得它们适用于编写简单的函数。
lambda 语法格式
lambda
是 Python 的关键字,用于定义 lambda 函数。arguments
是参数列表,可以包含零个或多个参数,但必须在冒号(:
)前指定。expression
是一个表达式,用于计算并返回函数的结果。
f = lambda: "Hello, world!"
print(f()) # 输出: Hello, world!
实例使用 lambda 创建匿名函数,设置一个函数参数 a,函数计算参数 a 加 10,并返回结果:
x = lambda a : a + 10
print(x(5)) // 15
lambda 函数也可以设置多个参数,参数使用逗号 , 隔开:
以下实例使用 lambda 创建匿名函数,函数参数 a 与 b 相乘,并返回结果:
x = lambda a, b : a * b
print(x(5, 6)) // 30
函数与 lambda 结合使用
def calc_function(o):if o == "+":return lambda a,b: a+belif o == "-":return lambda a,b: a-belif o == "*":return lambda a,b : a*bf = calc_function("+") # 返回的是lambda对象
print(f) # <function calc_function.<locals>.<lambda> at 0x10486f880>
r = f(2,3)
print(r) # 5
内置的 lambda 函数sort
l = [-1,2,3,-2]
l.sort()
print(l) # [-2, -1, 2, 3]
l.sort(reverse=True)
print(l) # [3, 2, -1, -2]
l = [(1,-3),(2,-5),(3,1)]
def func(p):return p[1]# 这个key实际上就是一种排序规则,如果传key那么规则就是我们自己进行定义的
l.sort(key=func)
print(l) # [(1, -3), (2, -5), (3, 1)]l.sort(key=func,reverse=True)
print(l) # [(3, 1), (2, -5), (1, -3)]
有列表结构如下:goods_info = [
("水杯", 12.5, 25),
("西装", 1280, 3689),
("电脑", 7800, 13800),
("摄像头", 248.8, 349)
]
第一列代表商品名称,第二列代表商品折扣价格,第三列代表商品原价
请按照商品折扣数进行从小到大排序
goods_info = [("水杯", 12.5, 25),("西装", 1280, 3689),("电脑", 7800, 13800),("摄像头", 248.8, 349)
]for i in goods_info:print(i[0],i[1]/i[2])goods_info.sort(key=lambda i:i[1]/i[2])
print(goods_info)
内置函数 Map
map() 函数会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
比如我们有一个列表,列表中的元素都是数字,那么请实现,把列表中的所有元素都加1,然后把结果放入到一个新的列表中
my_list = [1,2,3,4,5]
result = []for i in my_list:result.append(i+1)
print(result) # [2, 3, 4, 5, 6]
使用内置函数 Map
my_list = [1,2,3,4,5]
def add_one(e):return e+1r = map(add_one, my_list)
print(r) # <map object at 0x1026dc070> 返回的是一个 map 对象
print(list(r)) # [2, 3, 4, 5, 6]
# 加入e传入的是1,那么返回e+3 , 如果e传入的是2 那么返回2-1
def add_two(e):if e == 1:return e+3elif e == 2:return e-1else:return e
r = map(add_two, my_list)
r = list(r)
print(r) # [4, 1, 3, 4, 5]
内置函数结合 lamdba 表达式
# 结合lamdba表达式, 对每个元素+1
r = map(lambda e:e+1, my_list)
print(list(r)) # [2, 3, 4, 5, 6]print(list(map(lambda e:e+1, my_list))) # [2, 3, 4, 5, 6]