lambda(lambda 参数:函数体)表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。

lambda就是用来定义一个匿名函数的,如下所示:

add = lambda x, y : x+y

add(1,2)  # 结果为3

 

Python提供了很多函数式编程的特性,如:map、reduce、filter、sorted等这些函数都支持函数作为参数,lambda函数就可以应用在函数式编程中。如下:

map(function, sequence) :对sequence中的item依次执行function(item),见执行结果组成一个List返回:
>>> def cube(x):

     return x*x*x 
>>> map(cube, range(1, 11)) 
[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]

reduce(function, sequence, starting_value):对sequence中的item顺序迭代调用function,如果有starting_value,还可以作为初始值调用,例如可以用来对List求和:
>>> def add(x,y):

     return x + y 
>>> reduce(add, range(1, 11)) 
55 (注:1+2+3+4+5+6+7+8+9+10)
>>> reduce(add, range(1, 11), 20) 
75 (注:1+2+3+4+5+6+7+8+9+10+20)

 

filter(f,list):接收一个函数 f 和一个list,这个函数 f 的作用是对list每个元素进行判断,即f是判断方法,list是判断对象。filter()自动过滤掉非true的元素,返回由符合条件元素组成的新list。例如:

>>> list(filter(None,[1,0,True,False]))

[1, True]

>>> list(filter(lambda x:x*2,range(10)))                         

[1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> list(filter(lambda x:x%2,range(10)))

[1, 3, 5, 7, 9]

>>> list(filter(lambda x:x+2,range(10)))

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> list(filter(lambda x:x-2,range(10)))

[0, 1, 3, 4, 5, 6, 7, 8, 9]

 

sorted

# 需求:将列表中的元素按照绝对值大小进行升序排列

list1 = [3,5,-4,-1,0,-2,-6]

sorted(list1, key=lambda x: abs(x))

 

当然,也可以如下:

list1 = [3,5,-4,-1,0,-2,-6]

def get_abs(x):   

   return abs(x)

sorted(list1,key=get_abs)

 

posted on 2018-07-05 11:25  我是学习的  阅读(141)  评论(0编辑  收藏  举报