把函数作为参数传入,这样的函数称为高阶函数,高阶函数是函数式编程的体现。函数式编程就是指这种高度抽象的编程范式。
一、体验高阶函数
在python中,abs()函数可以完成对数字求绝对值计算,round()函数可以完成四舍五入计算
print(abs(-10)) # 10 print(round(1.2)) # 1 print(round(1.9)) # 2
需求:任意两个数字,按照指定要求整理数字后再进行求和计算
# 需求:任意两个数字,按照指定要求整理数字后再进行求和计算 # 写法一: def add_num(a, b): return abs(a) + abs(b) print(add_num(-1.5, 3)) # 4.5 # 写法二:高阶函数 def add_number(a, b, f): return f(a) + f(b) print(add_number(-1.2, 3.1, abs)) # 4.3 print(add_number(1.5, 1.1, round)) # 3
二、内置高阶函数
1、map()
map(func, lst),将传入的函数变量func作用到st变量的每个元素中,并将结果组成新的列表(python2)/(python3)返回。
需求:计算list1序列中各个数字的2次方
list1 = [1, 2, 3, 4, 5] def func(x): return x ** 2 result = map(func, list1) print(result) # <map object at 0x00000262668874E0> print(list(result)) # [1, 4, 9. 16, 25]
2、reduce()
reduce(func, lst),其中func必须有两个参数,每次func计算的结果继续和序列的下一个元素做累积计算。
注意:reduce()传入的参数func必须接收2个参数
需求:计算list1序列中各个数字的累加和。
from functools import reduce # 因为reduce属于functools,因此需要先引包 list1 = [1, 2, 3, 4, 5] def func(a, b): return a + b result = reduce(func, list1) print(result) # 15
3、filter()
filter(func, lst)函数用于过滤序列,过滤掉不符合条件的元素,返回一个filter对象。如果需要转换为列表,可以使用list()。
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] def func(x): return x % 2 == 0 result = filter(func, list1) print(result) # <filter object at 0x0000023B9F5E74E0> print(list(result)) # [2, 4, 6, 8, 10]
声明:本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长,进行删除处理。本网站所有内容未经授权请勿转载。本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报。