4.3 lambda表达式

时间:2023-03-09 08:48:33
4.3 lambda表达式

函数,封装的代码块可以很复杂,也可以很简单。当函数的代码块简单到只有一个表达式,就可以考虑用lambda表达式,也称匿名函数。

1 lambda表达式基础

 #首先需要声明一点:lambda是表达式而非语句
 #因为语句是为了声明一个逻辑,而表达式是为了计算或者返回值的。
 #lambd : print('hello,world')
 #上边就是一个lambda表达式,
 #但只有对象,没有名称,没有办法引用,
 #那就定义个变量指向lambda表达式对象
 a = lambda : print('hello,world')
 a()  #hello,world

 print(type(a))  # <class 'function'>  lambda表达式是函数,鉴定完毕

 #还是想再次声明一下,lambda表达式中写不了复杂的代码块,复杂的逻辑应该封装在def声明的函数中

 #lambda中的冒号就是函数头和函数体的分隔
 action = lambda a,b : a + b
 

2 lambda表达式应用

 #应用一:函数嵌套
 #需求:定义一个函数,计算一个数的平方值和立方值之和
 def my_fun(x):
     f1 = lambda x:x**2
     f2 = lambda x:x**3

     return f1(x) + f2(x)

 print(my_fun(2))

 #应用二:lambda对象作为列表、元组、字典等的元素
 a,b = 1,2
 fun_list = {lambda x,y:x+y,lambda x,y:x-y,lambda x,y:x*y,lambda x,y:x/y}

 for c in fun_list:
     if b != 0:
         print(c(a,b))
     else:
         print('分母不能为0哦')

 #-1
 #0.5

 #但这有一个问题,我自己定义的lambda列表,我知道每个lambda的功能,
 #但不方便别人理解代码,感觉字典表就好多了,键的命名可以体现一些lambda的功能
 #用键来引用对应的lambda就方便多了

 fun_dic = {
     '1cf':lambda x:x,
     '2cf':lambda x:x**2,
     '3cf':lambda x:x**3,
     '4cf':lambda x:x**4
 }

 for i in fun_dic.keys():
     print(fun_dic[i](b))

 #然后我执行获得一个数字的4次方值
 print(fun_dic['4cf'](5))

3 lambda表达式还可以作为回调函数处理句柄

 #回调函数,就是一个函数作为另一个函数的参数

 def fun1(a,b,fun):
     return fun(a,b)

 a = fun1(1,2,lambda x,y:x*y)
 print(a)

 #有没有感觉python中的对象就像一条傻狗,谁牵跟谁走
 #只要有一个变量指向这个对象,就可以通过这个变量来引用这个对象
 #而且,这个变量引用完这个对象,还可以引用其他对象
 a = 1
 a = 2

 print(a)