Python的高阶函数与lambda表达式

77 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第10天,点击查看活动详情

Lambda表达式

现在Lambda表达式非常的火热,它简化了代码的编写,Python也支持Lambda表达式,它的形式是lambda 参数列表:表达式

没有参数就不写,这里给出一个lambda表达式的例子

fn1 = lambda a, b: a if a > b else b
print(fn1(10, 20))

这段代码的内容就是判断第一个参数是否比第二个参数大,如果是就输出第一个参数,否则输出第二个参数。

lambda的参数还支持可变参数,可变参数的书写手法就是参数名前面加星号,比如:lambda **a: a

Python的高阶函数

高阶函数并不是你想象的很高级,只是Python为我们提供的一些方便我们使用的方法,比如abs()求绝对值,round()进行四舍五入取值。

map()函数对列表每个元素操作

map()函数有两个参数,第一个参数是需要调用的函数,第二个参数是个列表,作用就是列表中的所有元素依次调用这个函数,形成一个map对象,可以使用list()函数转换为列表。对于map()函数的使用,我们同样举一个例子看一下:

list1 = [1, 2, 3, 4, 5]
def func(x):
    return x ** 3
result = map(func, list1)
print(list(result))

这一段是对map()方法的使用,作用就是将列表中的元素都进行三次方后输出

filter()函数过滤列表数据

filter()方法是对列表的过滤的方法,它同样有两个参数,第一个参数是列表中元素需要调用的函数,这个函数用来判断元素是否满足某种条件,如果不满足会过滤掉,第二个参数是列表,结果会形成一个filter对象,可以转换为列表。

def func(x):
    return x % 3 == 0
result = filter(func, list1)
print(result)

print(list(result))

reduce()对列表元素函数累计操作

还有个有意思的函数是reduce()函数,它的作用是将列表的元素进行累计操作,

list1 = [1, 2, 3, 4, 5]
import functools
def func(a, b):
    return a * b
result = functools.reduce(func, list1)
print(result)

这段代码的内容是就是对列表元素累乘,最终输出一个值,需要注意的是使用reduce()方法需要引入functools库。

小结

这篇文章我们讲了Python的lambda表达式的内容和高阶函数的内容,lambda表达式简化了我们的代码,高阶函数中介绍了常用的reduce()函数,它的作用是对列表元素的累计操作,map()函数是对原始列表的每个元素的处理,filter()函数是对原始列表的过滤操作。也就是说调用reduce()函数后列表会变成一个值,调用map()后的列表长度不会变,调用filter()函数后长度会变小。