python中几种常用的内置高阶函数

本文介绍了Python中的高阶函数,包括map()、reduce()和filter()的使用方法。通过实例展示了如何利用这些函数进行序列操作,如计算绝对值之和、数字累加和以及过滤偶数。高阶函数的应用能够提高代码的简洁性和效率。
摘要由CSDN通过智能技术生成

1、定义

把函数作为参数传入,这样的函数称为高阶函数,高阶函数是函数式编程的体现。 函数式编程就是指 这种高度抽象的编程范式。

2、体验高阶函数

体验之前,先看看两个函数:

# 在Python中, abs() 函数可以完成对数字求绝对值计算
print(abs(-19))  # 19
# round():浮点数的四舍五入

#  round()注意(python3.5之后):如果距离两边一样远,会保留到偶数的一边;
#  比如round(0.5)和round(-0.5)都会保留到0,而round(1.5)会保留到2。

print(round(1.2852, 1))  # 1.3
print(round(1.8))  # 2

print(round(2.675, 2))  # 2.67
# 论我们从python2还是3来看,结果都应该是2.68的,
# 结果它偏偏是2.67,为什么?这跟浮点数的精度有关。我们知道在机器中浮点数不一定能精确表达,
# 因为换算成一串1和0后可能是无限位数的,机器已经做出了截断处理。
# 那么在机器中保存的2.675这个数字就比实际数字要小那么一点点。
# 这一点点就导致了它离2.67要更近一点点,所以保留两位小数时就近似到了2.67。

下面的例子要用到这两个函数,所有先说了一下,总之,round函数慎用。

例子:

# 需求:⼀一个函数完成计算任意两个数字的绝对值之和。
# 方法一:
def add_num1(a, b):
    return abs(a) + abs(b)
result1 = add_num1(-1, 2)
print(result1) # 3

# 2.方法二:
def add_num2(a, b, f):  # f是第三个参数,用来接收将来传入的函数
    return f(a) + f(b)

result2 = add_num2(-1, 2, abs)  # 求绝对值
print(result2) # 3

result3 = add_num2(2.2, 3.9, round)  # 四舍五入
print(result3)  # 6

注意:
两种方法对比之后,发现,⽅法2的代码会更加简洁。
函数式编程大量使用函数,减少了了代码的重复,因此程序比较短,开发速度较快。

3、内置高阶函数

3.1 map()

map(func, lst),将传入的函数变量func作用到lst变量量的每个元素中,并将结果组成新的列表(Python2)/迭代器(Python3)返回。

例子:

# 语法;map(func, lst)
list1 = [1, 2, 3, 4, 5]

def fun(x):  # 计算一个数的平方
    return x**2

result = map(fun, list1)  # 将fun作用到list1中的每个元素,返回一个迭代器
print(result)  # 结果:<map object at 0x0000016F3764D390>
print(list(result))  # 转换成列表,结果:[1, 4, 9, 16, 25]

这里map()函数还有一个很好的用法:

算法比赛中常见到,请在同一行输入n, m,这个map()函数就很好用,如下:

# 1. split()函数默认空格分割,2. 用split()函数分割之后就成单独的数了
n, m = map(int, input().split()) 
print(n, m)

3.2 reduce()

reduce(func(x,y),lst),其中func必须有两个参数。每次func计算的结果继续和序列的下一个元素做累计计算。
注意:reduce()传入的参数func必须接受2个参数。

例子:

需求:计算list1 序列中各个数字的累加和。

# 需求:计算list1 序列中各个数字的累加和。
import functools

list1 = [1, 2, 3, 4, 5]

result = functools.reduce(lambda a, b : a + b, list1)  # 作用就是简化代码
print(result)  #15

3.3 filter()

filter(func, lst)函数用于过滤序列, 过滤掉不符合条件的元素, 返回一个 filter 对象。如果要转换为列表,可以使用 list() 来转换。

例子:

需求:过滤掉序列中的偶数

# 需求:过滤掉序列中的偶数
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

result = filter(lambda x: x%2 != 0, list1)  # 符合条件的保留
print(result)
print(list(result))  # [1, 3, 5, 7, 9]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值