Python之map/filter/reduce/lambda函数简介

(本文大部分内容来源于此链接的文章菜鸟教程,我对部分内容做了一些改动,方便自己日后复习,若有侵权,请联系我,我会将此文删除,谢谢)


lambda()函数

lambda函数又称匿名函数。当使用的函数只是临时一用,而且自身内部实现也很简单时,就可以使用lambda函数。

下面是一个简单的lambda函数例子:

>>> lambda x, y: x + y
<function <lambda> at 0x...>

上面的代码中,x与y是函数的两个参数,冒号后面的表达式x+y是函数的计算逻辑,显然这个函数是在求两个数的和。下面的代码会给上面的lambda函数绑定一个名字,这样使得调用匿名函数更方便:

>>> add = lambda x, y: x + y
>>> add
<function <lambda> at 0x000001B1E3C1E5E0>
>>> add(3, 2)
5

下面是未使用lambda函数的常规函数:

>>> def add2(x, y):
...     return x + y
...
>>> add2
<function add2 at 0x000001B1E3C1E550>
>>> add2(1, 2)
3

lambda函数使用场景

函数式编程

如,要求将一个整数列表按表内元素的绝对值,从小到大升序排列,代码如下:

>>> list1 = [-1, 4, -2, 3, -6, 5]
>>> sorted(list1, key=lambda x: abs(x))
[-1, -2, 3, 4, 5, -6]

sorted()函数支持接收一个函数作为参数,该参数作为sorted()的排序依据,上述代码中是按照列表元素的绝对值进行排序。


map()函数

语法:map(function, iterable, …)

参数:function是指定的函数,iterable是一个序列。

描述:map()会根据提供的函数function来对指定序列iterable做映射。具体是:function以序列iterable中的每一个元素作为参数,将得到的所有返回值以一个列表形式返回。

示例代码如下:

>>> def square(x):
...     return x**2
...
>>> list(map(square, [1,2,3,4,5]))
[1, 4, 9, 16, 25]
>>> list(map(lambda x: x ** 2, [1,2,3,4,5])) # 使用lambda匿名函数
[1, 4, 9, 16, 25]
>>> list(map(lambda x, y: x + y, [1,2,3], [3,2,1]))
[4, 4, 4]

filter()函数

语法:filter(function, iterable)

参数:function是判断函数,iterable是一个序列。

描述:filter()函数用于过滤掉序列中不符合条件的元素,然后返回一个迭代器对象(若想以列表形式输出这个迭代器,使用list()即可)。在使用filter()函数时,iterable序列中的每个元素作为参数传递给function判断函数进行判断,然后返回True或False,最后将返回True的元素作为输出结果。(返回值是一个迭代器对象

示例代码如下:

>>> def is_odd(n): # 判断n是否为奇数
...     return n % 2 == 1
...
>>> filter(is_odd, [1,2,3,4,5,6,7,8,9,10]) # 返回一个迭代器
<filter object at 0x000001B1E3BF09D0>
>>> list(filter(is_odd, [1,2,3,4,5,6,7,8,9,10])) # 将输出结果转换为列表
[1, 3, 5, 7, 9]

reduce()函数

语法:reduce(function, iterable)

参数:function是指定的函数(参数有两个),iterable是一个序列。

描述:reduce()将对参数序列中元素进行累积:先使用function(参数有两个)对iterable序列中的第1、2个元素进行操作,然后将得到的结果再与第3个进行操作,然后再将得到的结果与第4个进行操作…直到与最后一个元素进行操作,最终得到一个结果。

示例代码如下:

>>> from functools import reduce # 从functools模块中导入reduce函数
>>> def add(x, y):  # 计算两个数的乘法
...     return x * y
...
>>> reduce(multiply, [1,2,3,4,5])
120
>>> reduce(lambda x, y: x * y, [1,2,3,4,5])
120

(本文大部分内容来源于此链接的文章菜鸟教程,我对部分内容做了一些改动,方便自己日后复习,若有侵权,请联系我,我会将此文删除,谢谢)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章