Python匿名函数
匿名函数
匿名:隐藏名字,即没有名称
匿名函数:没有名字的函数
lambda表达式
Python中使用lambda表达式构建匿名函数。
lambda 参数列表:表达式
调用:(lambda 参数列表:表达式)(参数)
(lambda x : x + 1 )(4)
foo = lambda x : x ** 2 #表达式,只能写一行,不能出现赋值语句,不能见等号
foo(2) #调用
#输出
4
##################################
foo1 = lambda x,y : (x+y) ** 2
foo1(1,2) #9
等价于:
def foo2(x,y):
return (x+y) ** 2
foo2(1,2)
总结匿名函数:
使用lambda关键字进行定义,格式为lambda [参数列表] :表达式 , 不能写赋值语句,只能写一行
参数列表不需要写小括号,无参就不写参数
冒号来分隔参数列表和表达式部分
不需要使用return,表达式的值就是匿名函数的返回值,表达式中标不能使用等号
lambda表达式只能写一行,使用lambda表达式,往往简洁化
匿名函数往往使用在高阶函数传参时,使用lambda表达式,往往能简化代码
示例:
#返回常量的函数 print((lambda : 0)()) #x = (lambda : 0)() #加法匿名函数,带缺省值 add = (lambda x,y=20:x + y) add(5,4) # 9 add(3) # 23 #keyword-only参数 add1 = (lambda x,*,y:x + y) add1(1,y=2) # 3 add1 = (lambda x,*,y=20:x + y) add1(1) # 21 #可变参数 x = (lambda *args:(x for x in range(5)))() #返回一个生成器对象 next(x) #lambda函数返回一个列表 y = (lambda *args:[x for x in range(5)])(*range(5)) print(y) # [0,1,2,3,4] print((lambda *args:[x for x in range(5)])(*range(10))) # [0,1,2,3,4] print((lambda *args:{x % 2 for x in range(5)})(*range(5))) #{0,1} 或{1,0} print([x for x in (lambda *args:map(lambda x:x+1,args))(*range(5))])
# [1, 2, 3, 4, 5] 高阶函数
print([x for x in (lambda *args:map(lambda x:(x+1,args),args))(*range(5))])
# [(1, (0, 1, 2, 3, 4)), (2, (0, 1, 2, 3, 4)), (3, (0, 1, 2, 3, 4)), (4, (0, 1, 2, 3, 4)), (5, (0, 1, 2, 3, 4))]
defaultdict运用lambda函数传参:
#示例1 from collections import defaultdict d = defaultdict(list) d[0].extend([1]) print(d) #示例2 from collections import defaultdict d = defaultdict(lambda :[]) d[0].extend([1]) print(d) #示例3 from collections import defaultdict d = defaultdict(lambda :list()) d[0].extend([1]) print(d)
sorted内嵌函数:
sorted(['a',1,2,3],key=str) 改写为lambda函数表达式 sorted(['a',1,2,3],key=lambda x:str(x)) sorted(['a', 1, 'b', 12, 'c', 28],key=lambda x :ord('x') if isinstance(x,str) else x) sorted(['a', 1, 'b', 12, 'c', 28],key=lambda x :int(x,16) if isinstance(x,str) else x)

浙公网安备 33010602011771号