匿名函数,就是我们需要一个函数,但是没有必要给它起一个名字,因为这个名字无关紧要,而且有时影响效率。
在Python中,def关键字是用来定义常规函数的,而lambda关键字则是用来创建匿名函数的。

那么我们常说的lambda表达式应该怎么写呢?
我们又可以用lambda表达式干什么事情呢?

Concept

Lambda表达式语法如下:

lambda arguments: expression  

这个函数可以有任意数量的参数arguments,但是只有一个表达式expression,函数计算并返回这个表达式的值。
我们可以比较随意地使用lambda表达式,但是要牢记一点,就是它被严格限制只能有单一的表达式。

Difference between def and lambda

为了理解def定义的普通函数与lambda函数的区别,我们举个例子。
小目标:求给定数的三次方。
Implementation

def cube(y): 
    return y*y*y; 
  
g = lambda x: x*x*x 
print(g(7))   
print(cube(5)) 

Output:

343
125

使用def:首先,我们需要定一个名为cube的函数,并传递值给它。运算执行完后,我们还需要调用return返回计算结果给调用函数的地方。
使用LambdaLambda 表达式不需要 return 语句,它只包含一个表达式,计算并返回。 理论上,在可以用函数的地方我们都可以用lambda

Uses of Lambda

实际上,PythonLambda 表达式的强大之处在于它可以和很多内置函数一起用。比如filter()map()reduce()

lambda + filter

filter()函数的参数为一个function和一个list。提供了一种优雅的筛选元素的方法。通过传递列表中的每个元素到function中,判断是否满足条件,满足则返回True。例如:

nums = [5, 7, 22, 97, 54, 62, 77, 23, 73, 61] 
odd = list(filter(lambda x: (x%2 != 0) , nums)) 
print(odd)   
# [5, 7, 97, 77, 23, 73, 61]

lambda + map

map()函数的参数为一个function和一个list。通过function映射list中的每个元素,达到改变其值的目的。返回一个元素统一修改后的列表。例如:

nums = [5, 7, 22, 97, 54, 62, 77, 23, 73, 61]
double = list(map(lambda x: x*2, nums))
print(double)
# [10, 14, 44, 194, 108, 124, 154, 46, 146, 122]

lambda + reduce

reduce()函数的参数为一个function和一个list。这是通过调用lambda函数,反复操作list里面的数对。reduce()functools模块中的一个。

from functools import reduce
nums = [5, 8, 10, 20, 50, 100] 
sum = reduce((lambda x, y: x + y), nums) 
print (sum) 
# 193  

这里前两个元素相加的结果会累加到下一个元素,如此迭代直到列表末尾。它执行起来类似这样(((((5+8)+10)+20)+50)+100)

Practice

给一个list[1,2,3,2,2,2,5,4,2],我们已经遍历一边统计了每个数字出现的次数,得到一个dictcout = {1: 1, 2: 5, 3: 1, 5: 1, 4: 1},现在我们想要里面出现次数最多那个数字。

A: Look Here->1 ~

Reference

GeeksForGeeks
知乎

  1. cd = sorted(cout.items(), key=lambda item: item[1], reverse=True)