三、lambda表达式
3.1 lambda的应用场景
如果一个函数有一个返回值,并且只有一句代码,可以使用lambda简化。(可以简化代码,又可以节省服务器内存开销。)
3.2 lambda语法
lambda 参数列表 : 表达式
表达式必须有返回值。
注意:
lambda表达式的参数可有可无,函数的参数在lambda表达式中完全适用。
lambda表达式能接收任何数量的参数但只能返回一个表达式的值。
# 1. 函数
def fn1():
return 100
result = fn1()
print(result) # 100
print(fn1) # <function fn1 at 0x000001E4D0FB7280>
print(fn1()) # 100
# 2. lambda表达式 匿名函数
fn2 = lambda: 100
print(fn2) # <function <lambda> at 0x0000020859EB9040> # lambda内存地址
# 100返回值 调用函数
print(fn2()) # 100
注意:直接打印lambda表达式,输出的是此lambda的内存地址。
3.3示例:计算a + b
3.3.1 函数实现
def add(a, b):
return a + b
result = add(1, 2)
print(result) # 3
思考:需求简单,是否代码多?
3.3.2 lambda实现
fn1 = lambda a, b: a + b
print(fn1(1, 2)) # 3
3.4 lambda的参数形式
3.4.1 无参数
fn1 = lambda: 100
print(fn1()) # 100
3.4.2 一个参数
fn2 = lambda a: a
print(fn2('hello world!')) # hello world!
3.4.3 默认参数(缺省参数)
fn1 = lambda a, b, c=100: a + b + c
print(fn1(10, 20)) # 130
print(fn1(10, 20, 200)) # 230
3.4.4 可变参数:*args
fn1 = lambda *args: args
print(fn1(10, 20, 30)) # (10, 20, 30)
print(fn1(10, 20, 30, 40)) # (10, 20, 30, 40)
注意:这里的可变参数传入到lambda之后,返回值为元组。
3.4.5 可变参数: **kwargs
fn1 = lambda **kwargs: kwargs
print(fn1(name='Python')) # {'name': 'Python'}
print(fn1(name='Python', age=30)) # {'name': 'Python', 'age': 30}
3.5 lambda的应用
3.5.1 带判断的lambda
# lambda 两个数字比大小,谁大返回谁
fn1 = lambda a, b: a if a > b else b
print(fn1(1000, 500)) # 1000
print(fn1(20, 50)) # 50
3.5.2 列表数据按字典key的值排序
student = [
{'name':'TOM', 'age':20},
{'name':'ROSE', 'age':19},
{'name':'Jack', 'age':22},
]
# sort(key=lambda..., reverse=bool数据)
# 1. name key 对应的值进行升序排序
student.sort(key=lambda x: x['name'])
print(student)
# [{'name': 'Jack', 'age': 22}, {'name': 'ROSE', 'age': 19}, {'name': 'TOM', 'age': 20}]
# 2. name key 对应的值进行降序排序
student.sort(key= lambda x: x['name'], reverse=True)
print(student)
# [{'name': 'TOM', 'age': 20}, {'name': 'ROSE', 'age': 19}, {'name': 'Jack', 'age': 22}]
# 3, age key对应的值进行升序排序
student.sort(key= lambda x: x['age'])
print(student)
# [{'name': 'ROSE', 'age': 19}, {'name': 'TOM', 'age': 20}, {'name': 'Jack', 'age': 22}]