lambda表达式
一、应用场景
如果一个函数有一个返回值,并且只有一句代码,可以使用lambda简化。
lambda也叫匿名函数
二、语法
lambda 参数列表 : 表达式
注:
(1) lambda表达式的函数可有可无,函数的参数在lambda表达式中完全适用。
(2) lambda表达式能接收任何数量的参数但只能返回一个表达式的值
#函数:
def fn1():
return 200
print(fn1())
print(id(fn1()))
#lambda表达式:
fn2 = lambda: 200
print(fn2) #输出的是lambda内存地址
print(fn2()) #200
三、示例
计算a+b
3.1 函数实现:
def add(a, b):
return a + b
result = add(1, 2)
print(result)
3.2lambda实现
fn1 = lambda a, b: a + b
print(fn1(1, 2))
四、lambda的参数形式
4.1 无参数
fn1 = lambda : 100
print(fn1())
4.2 一个参数
fn2 = lambda a: a
print(fn2('hello world'))
4.3 默认参数
fn3 = lambda a, b, c=100: a + b + c
print(fn3(10, 20)) #130
print(fn3(10, 20, 30)) #60
注:如果默认参数c被传了值,则会覆盖原有的数据,用新的数据来调用。
4.4 可变参数:*args
*args接收不定长的位置参数,返回值为元组
fn4 = lambda *args: args
print(fn4(10, 20, 30)) #(10, 20, 30)
4.5 可变参数:**kwargs
**kwargs接收不定长的关键字参数,返回的是字典
fn5 = lambda **kwargs: kwargs
print(fn5(name='python', age=20))
# {'name': 'python', 'age': 20}
五、lambda应用
5.1 带判断的lambda
print((lambda a, b: a if a > b else b)(1000, 500))
5.2 列表数据按字典key的值排序
students = [
{'name': 'TOM', 'age': 20},
{'name': 'ROSE', 'age': 19},
{'name': 'Jack', 'age': 22}
# 按name值升序排列
students.sort(key=lambda x: x['name'])
print(students)
# 按name值降序排列
students.sort(key=lambda x: x['name'], reverse=True)
print(students)
# 按age值升序排列
students.sort(key=lambda x: x['age'])
print(students)
六、高阶函数
把函数作为参数传入,这样的函数称为高阶函数。高阶函数是函数式编程的体现。函数式编程就是指这种高度抽象的编程范式。
6.1 体验高阶函数
在python中,
abs() 函数用于计算绝对值。
abs(-10) # 10
round() 函数用于对数字进行四舍五入计算。
round(1.8) #2
需求:⼀个函数完成计算任意两个数字的绝对值之和。
方法一:
def add_num(a, b):
return abs(a) + abs(b)
result = add_num(-1, 2)
print(result) # 3
方法二:
def sum_num(a, b, f):
return f(a) + f(b)
# f是形参,用来传入任意函数
result = sum_num(-1, 2, abs)
print(result) # 3