1. 定义lambda表达式
- lambda表达式又称匿名函数,常用来表示内部仅包含1行表达式的函数,语法格式如下:
func = lambda [arg1[, arg2,... argN]]: expression
func是一个变量,引用lambda定义的函数对象
lambda是关键字
[arg1[, arg2,... argN]]是可选参数,等同于定义函数时要指定的参数列表
expression是一行表达式,其运算结果就是函数的返回值
- 转换成def函数语法如下:
def func([arg1[, arg2,... argN]]):
return expression
- 举例:设计求两个数之和
# 普通函数的方式
def add(x, y):
return x+y
print(add(3, 4))
# lambda表达式
add1 = lambda x, y: x+y
print(add1(3, 4))
2. lambda表达式与def函数区别
- lambda可以定义一个匿名函数,而def定义的函数必须有一个名字
- lambda是一个表达式,而不是一个语句。因此能够出现在python语法不允许def出现的地方。例如,在一个列表常量中,或者函数调用的参数中
- lambda的主体是一个单个的表达式,而不是一个代码块。lambda包含的代码相当于def中return子句后的代码,只能是简单的表达式,所以说lambda的能力小于def,在lambda中只能使用简单的语法,不能使用if else while return等语句
3. 相比def函数,lambda表达式的优势
- 对于单行函数,使用lambda表达式可以省去定义函数的过程,让代码更加简洁
- 对于不需要多次复用的函数,使用lambda表达式可以在用完后立即释放,提高程序执行的性能
4. 应用
filter()
筛选100以内的3的倍数,并生成一个列表
# lambda表达式实现
l = list(filter(lambda x: True if x % 3 == 0 else False, range(100)))
print(l)
# def函数实现
def f(x):
if x % 3 == 0:
return True
else:
return False
l = list(filter(f, range(100)))
print(l)
"""
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]
"""
filter()简单的理解为过滤器,它需要两个参数,function和一个序列(字符串、列表、元组都是序列),过滤器会依次将序列的值传入function中,如果返回True的话,将其重新生成一个列表返回。
map()
# def函数实现
li = [11, 22, 33]
sl = [1, 2, 3]
def f(a, b):
return a+b
l1 = map(f, li, sl)
print(list(l1))
# lambda表达式实现
l2 = map(lambda a, b: a+b, li, sl)
print(list(l2))
"""
[12, 24, 36]
[12, 24, 36]
"""
map()表示映射,它需要两个参数,function和一个序列(字符串、列表、元组都是序列),也是将序列放入函数进行运算,不论运算结果是什么,map()都将逐一反馈
reduce()
对序列内元素进行累加((((1+2)+3)+4)+5)
from functools import reduce
# def函数实现
li = [1, 2, 3, 4, 5]
def f(a, b):
return a+b
l1 = reduce(f, li)
print(l1)
# lambda表达式实现
l2 = reduce(lambda a, b: a+b, li)
print(l2)
"""
15
15
"""
对序列内元素进行阶乘((((1*2)*3)*4)*5)
# def函数实现
def f(a, b):
return a*b
l1 = reduce(f, range(1, 6))
print(l1)
# lambda表达式实现
l2 = reduce(lambda a, b: a*b, range(1, 6))
print(l2)
"""
120
120
"""
reduce()表示累计,它需要两个参数,function和一个序列(字符串、列表、元组都是序列),也是将序列放入函数进行累计运算
sort()
根据每个元组的第一个元素进行排序
a = [(4, 1), (1, 2), (9, 10), (13, -3)]
a.sort(key=lambda x: x[0])
print(a)
"""
[(1, 2), (4, 1), (9, 10), (13, -3)]
"""