目录索引
lambda的应用场景:
- 如果函数有一个返回值,并且只有一句代码,这时候可以用lambda函数进行简化写法。
- lambda函数又称匿名函数,不可复用,只能当前位置使用,好处是简洁方便,不用特意创建一个函数。
lambda的语法:
变量名 = lambda 参数列表:表达式
- lambda表达式的参数可有可无,但表达式一定要有,函数的参数在lambda表达式中完全适用
- lambda表达式能接收任何数量的参数,但只能返回一个表达式的值
#举个例子:
def fn():
return "我好帅"
print(fn)
print(fn())
fn1 = lambda :"我也好帅"#这里就是省略了参数
print(fn1)
print(fn1())
效果展示:
注意: 直接打印lambda表达式,输出的是lambda的id地址(内存地址)
#举第二个例子,这次我们要求计算a+b的值
def add(a,b):
return a+b
print(add(1,2))#结果为3
result = lambda a,b:a+b
print(result(1,2))#结果为3
怎么样,经过上述的例子,我们是不是会发现lambda函数对于简易函数的实现非常方便。
lambda函数的参数形式:
1. 无参数:
#举个例子:
result = lambda:100
print(result())
#返回结果为100
注意: lambda身为匿名函数,调用的时候要带括号。
2. 一个参数:
#举个例子:
fn = lambda a:a
print(fn(1))#输出结果为1
3. 默认参数:
#举个例子:
fn = lambda a,b,c=100:a+b+c
print(fn(200,300))#c默认为100了。输出结果为600
print(fn(200.300,200))#c被重新赋值了200,输出结果为700
4. 可变参数:*args:
#举个例子:
fn = lambda *args:args
print(fn(1,2,3))
#输出结果为:(1,2,3)
我们可以看到,args是可以返回任意数量参数的可变参数,且返回的形式是元组
5. 不可变参数:**kwargs:
#举个例子:
fn = lambda **kwargs:kwargs
print(fn(name = "Tom",sex = "男"))
#输出结果为:{'name': 'Tom', 'sex': '男'}
**注意:**当以字典形式传参,我们再给字典赋值时要以== = 号的形式输入。而不是以 :===号的方式,否则会报错。
lambda函数的应用:
1. 带判断的lambda:
#举个例子:
fn = lambda a,b:a if a>b else b
print(fn(100,200))#输出结果为:200
print(fn(200,100))#输出结果为:200
首先冒号前面是参数,if前面的a是满足a>b的情况下返回的结果,而b是else的情况返回的结果。
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)
reverse的中文含义是倒置,是否倒置,默认是False即升序排列。True为倒置,是降序排列。简记:降T
关于这个lambda的写法,我们可以这样理解。它取了一个可遍历对象的元素,然后对元素进行选择。
#举个例子:
students = [("Tom",1,"a"),("Job",5,"b"),("Penny",3,"c")]
#key表示的是按什么东西来排序
students.sort(key=lambda x:x[0])#选中了元素中的下标0的项,也就是名字
print(students)
students.sort(key=lambda x:x[1])#选中了元素中的下标1的项,也就是数字
print(students)
students.sort(key=lambda x:x[2])#选中了元素中的下标2的项,也就是字母
print(students)
跟map函数联动:
简单介绍下map函数(),它的用处是将作用函数依次运用到可便利对象的身上。
map(function,iterable)
- function是作用的函数,iterable是可遍历的对象。
a = map(lambda x:x**2,[1,2,3,4,5])
print(map(lambda x:x**2,[1,2,3,4,5]))
print(list(a))
效果展示:
在python3中直接打印map函数返回的是一个迭代器的内存地址,需要使用list进行转换才可以输出
函数屏蔽功能:
有时候我们可以利用lambda函数来屏蔽一个函数的功能
- 函数有参数的屏蔽情况:
#举个例子:
import time
start_time = time.time()
time.sleep(3)
end_time = time.time()
print(f"现在过去了{end_time-start_time}秒")
time.sleep = lambda x:None #返回值变成了None
start_time = time.time()
time.sleep(3)##返回值变成了None,什么也不做
end_time = time.time()
print(f"现在过去了{end_time-start_time}秒")
呈现效果:
函数屏蔽成功
- 函数无参数时的屏蔽情况
#举个例子:
import time
time.time = lambda :None #无参数屏蔽函数
start_time = time.time()
time.sleep(3)
end_time = time.time()
print(f"现在过去了{end_time-start_time}秒")
呈现效果:
函数屏蔽成功