匿名函数
lambda函数是匿名函数,lambda
是关键字,匿名函数其实就是没有函数名的函数。
语法:lambda arg1,arg2,arg3...:expression
其中arg是参数,expression是表达式
特点:
1、匿名函数没有函数名,所以不用担心函数命名冲突
2、函数名的限制是只有一个表达式,不用写return,返回值就是匿名函数的结果
3、可以通过赋值给变量的方式来调用该函数
和普通函数的区别:对于那些可以用一条表达式来实现的方法,很适合用匿名函数来实现,增加代码的简洁度,但是对于不确定参数个数的情况,更适合用普通函数实现,各有优缺。
匿名函数和普通函数的区别示例
res = lambda x,y:x+y
print("匿名函数 - 两数之和",res(10,20)) # 两个数之和
def fun1(a,b):
return a + b
print("普通函数 - 两数之和",fun1(10,20))
# 匿名函数与内置函数sum()结合使用
res1 = lambda *args:sum(args)
print(res1(10,20,30))
# 引申知识:我们想要用sum函数实现多数字相加的话,传的参数需要是一个列表类型
lst = [1,2,3,4,5]
print("sum():",sum(lst)) # 15
# print(sum(1,2,3,4,5)) #报错 sum() takes at most 2 arguments (5 given)
# 但是我们在匿名函数中传的参数10,20,30,并不是列表却没有报错的原因是*args的类型就是列表
a,*b,c = 1,2,3,4,5,6,7
print(b) # [2,3,4,5,6]
内置函数 - map()函数
语法:map(function,iterable,..)
会根据提供的括号内函数对给出的序列做一一映射
function为指定的函数,iterable为所提供的序列,可以为多个序列
# 普通函数、匿名函数、map()函数的结合使用
list1 = [1,2,3,4,5,6,7]
def func2(x):
return x*x
res2 = map(func2,list1)
print("多个数字的平方:",res2)
print("多个数字的平方:",list(res2))
func3 = lambda x:x*x
res3 = map(func3,list1)
print("多个数字的平方:",res3)
print("多个数字的平方:",list(res3))
''' 运行结果
多个数字的平方: <map object at 0x000001CAE5F57190>
多个数字的平方: [1, 4, 9, 16, 25, 36, 49]
多个数字的平方: <map object at 0x000001CAE5FB27C0>
多个数字的平方: [1, 4, 9, 16, 25, 36, 49]
'''
实现多个数字的平方
# 普通函数实现多个数字的平方
list3 = [1,2,3,4,5,6,7,8]
def func4(x):
res = 1
lst = []
for i in x:
res = i * i
lst.append(res)
print("普通函数实现多个数字的平方",lst)
func4(list3)
# 匿名函数实现多个数字的平方
func5 = lambda args:args*args
li = []
for i in list3:
res5 = func5(i)
li.append(res5)
print("匿名函数实现多个数字的平方",li)