工作中使用Lambda Map和Filter的一些体会

如何学习

不管学习哪一门语言,要想掌握它,不是不停的看书(先看基础,再看高级,再看核心代码分析),我一般都是建议在动手中学习,在项目中掌握和完善你的知识体系。其实学习Python也是一样,只要学过一些基础知识,比如list,dict和类之后,就可以开始做一些小项目了,比如写一个小游戏,做一个小网站,开发一个学习系统,在项目中,会用到一些Python的知识,有可能不懂,理解不深,再反过来,再去学习相关的基础知识,加强理解。

下面是我对Lambda Map和Filter的一些体会和大家分享一下

lambda函数

比如我想实现一个两个数相加的功能,并返回相应的结果,如果用一个函数来实现,可能是这样:

# define a sum function
def sum_fuc(num1,num2):
    return num1 + num2


sum1_func = sum_fuc(1,2)
print(sum1_func) # sum1_func = 3

那如果我不想定义一个函数,我还想实现两个数相加的功能怎么办呢?我就想到lambda函数,为什么呢?因为lambda有这么几个特点

  • 他是一个函数,可以实现一些简单的函数功能
  • 可以不用def这种方式显式的去定义
  • 使用场景可能就这一个地方,其他地方也不会重复调用

那么我就尝试去写这个lambda函数,可以这样实现

# lambda
sum_lmd = lambda num1, num2: num1 + num2
print(sum_lmd(1,2)) # 同样返回sum_lmd = 3

大家对比上面两种实现方式可以发现,同样的功能,一个是定义一个函数,一个不需要定义,这就是匿名函数的由来了

map函数

接着我们尝试把上面学习到的知识扩展一下,学习一下map函数,并应用到序列中去试试,比如一个列表中,我们想让列表中的每一个数乘以5.

如果定义一个函数实现,代码如下:

# map
list1 = [1, 2, 3, 4, 5]
print(list1)

# # define a function
def mult5_func(num):
    return num * 5

print(list(map(mult5_func, list1)))

如果用lambda实现,一句话就能搞定,代码如下:

# # lambda
print(list(map(lambda num: num*5, list1)))

注意,在Python3中,如果不加list强制类型转换,打印出来的是一个地址,Python2中可以直接打印

filter函数

和map函数一样,lambda函数也可以方便我们快速的使用filter函数,比如我们判断一个list中的元素是不是偶数,直接上代码给大家演示一下

# filter
list1 = [10, 13, 15, 16, 19, 33, 55, 66]

# define a function
def is_even_func(num):
    return num % 2 == 0

print(list(filter(is_even_func, list1)))

上面是来函数的实现,同样也可以用lambda函数快速实现

list1 = [10, 13, 15, 16, 19, 33, 55, 66]
print(list(filter(lambda num: num%2 ==0, list1)))

这样,我们就会从学习lambda为切入点,一起掌握了map和filter函数的用法了!