匿名函数定义
匿名就是指没有名字。 如果函数比较简单,有时不需要给函数命名,使用lambda表达式来使用匿名函数。 lambda 函数拥有自己的命名空间,不能访问自己参数列表之外或全局命名空间里的参数。
匿名函数语法
变量名 = lambda 参数:表达式(block) 参数:可选,通常以逗号分隔的变量表达式形式,也就是位置参数 表达式:不能包含循环,return,可以包含if…else… 表达式计算的结果为lambda函数的返回值。 默认参数,关键字参数以及不定长参数都可以正常使用
"""
1. 定义时=前的变量名s就指向lambda函数的地址,调用匿名函数用它调用。
2. 表达式的值作为lambda函数的返回值。
"""
s = lambda a, b : a+ b
print ( s( 2 , 3 ) , s)
result:
5 < function < lambda > at 0x7f5e876c06a8 >
s = lambda a, * args : args + ( 66 , 88 )
print ( s( 2 , 3 , 4 , 5 ) )
( 3 , 4 , 5 , 66 , 88 )
匿名函数用途
lambda函数可以作为参数
"""
1. 当调用s()时,func = lambda a, b : a+b+20 即 (func(a,b):return a+b+20)
2. 第一个lambda函数的返回值是func(x, y)即func(1,2)传到func(a,b):return a+b+20)则为23
"""
s = lambda x, y, func : func( x, y)
result = s( 1 , 2 , lambda a, b : a+ b+ 20 )
print ( result)
result:
23
lambda函数配合内置函数
在有些内置函数中有key参数可以使用lambda函数
"""
1. max函数将元素一个一个取出来比较,list可以直接比。
2. 字典不可以直接比,但是可以按照某个key值比,所以key=lambda x:x["a"]表示每次比较时取出的元素x,返回x中key为"a"的value进行比较。
"""
list1 = [ 7 , 3 , 2 , 6 , 8 , 9 , 13 , 18 ]
print ( max ( list1) )
result:
18
list2= [ { "a" : 15 , "b" : 10 } , { "a" : 3 , "b" : 6 } , { "a" : 8 , "b" : 7 } , { "a" : 30 , "b" : 40 } ]
print ( max ( list2, key= lambda x: x[ "a" ] ) )
result:
{ 'a' : 30 , 'b' : 40 }
lambda函数和map
map()利用指定函数对可迭代对象的元素做映射。 每次取出一个元素做映射。
map ( func, * iterables) - - > 返回map object
list1 = [ 1 , 2 , 3 , 4 , 5 , 6 ]
result = map ( lambda x: x if x% 2 == 0 else x+ 8 , list1)
print ( list1)
print ( list ( result) )
result:
[ 1 , 2 , 3 , 4 , 5 , 6 ]
[ 9 , 2 , 11 , 4 , 13 , 6 ]
lambda函数和reduce函数
reduce函数会对参数序列中元素进行累积。 函数将一个数据集合(链表,元组等)中的所有数据进行下列步骤操作:
用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作。 得到的结果再与第3个数据用 function 函数运算,以此类推,直至最后一个元素。 reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates ((((1+2)+3)+4)+5)
"""
如果存在initial,则将其放在计算序列的项之前,如果序列为空,则作为默认值。
返回值为累积计算结果。
"""
reduce ( function, sequence[ , initial] ) - > value
"""sum1运算过程
1. x=1,y=2
2. x=3,y=3
3. x=6,4
...
"""
from functools import reduce
sum1 = reduce ( lambda x, y: x+ y, [ 1 , 2 , 3 , 4 , 5 ] , 8 )
sum2 = reduce ( lambda x, y: x+ y, [ ] , 8 )
print ( sum1)
print ( sum2)
result:
23
8
lambda函数和filter
filter() 用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的filter对象。 序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
filter ( function, iterable)
from math import *
result = filter ( lambda x: sqrt( x) % 1 == 0 , range ( 100 ) )
print ( list ( result) )
result:
[ 0 , 1 , 4 , 9 , 16 , 25 , 36 , 49 , 64 , 81 ]
lambda函数和sorted
可以提供自定义键函数来自定义排序依据。 可以设置反向标志按降序排列
sorted ( iterable, / , * , key= None ( function) , reverse= False )
list1= [ ( 'b' , 2 ) , ( 'a' , 15 ) , ( 'c' , 7 ) , ( 'd' , 4 ) ] ;
result= sorted ( list1, key= lambda x: x[ 1 ] )
print ( result)
result:
[ ( 'b' , 2 ) , ( 'd' , 4 ) , ( 'c' , 7 ) , ( 'a' , 15 ) ]