高阶函数:把函数作为参数传入,这样的函数称为高阶函数,高阶函数是函数式编程的体现。函数式编程就是指这种高度抽象的编程范式。
高阶函数,它是可以把函数作为一个参数传入到函数内部。
高阶函数的由来
在Python中,abs()
函数可以完成对数字求绝对值计算。 (MANU ABS 手动绝对值)
① 正数的绝对值是它本身 ② 负数的绝对值是它的相反数
abs()返回的结果都是正数
abs(-10) # 10 print(abs(-10))
round()
函数可以完成对数字的四舍五入计算。
a = round(1.2) # 1 b = round(1.9) # 2 print(a, b)
案例:任意两个数字,按照指定要求(① 绝对值 ② 四舍五入)整理数字后再进行求和计算。
思考:两个数。先算绝对值,把得到的两个绝对值数字,求和。。。再四舍五入,把得到的两个数字,求和。
一步步来,按照正常的,先求绝对值:
def fn1(num1, num2): return abs(num1) + abs(num2) print(fn1(-10, 10))
接着,求 四舍五入
def fn2(num1, num2): return round(num1) + round(num2) print(fn2(10.2, 6.9))
图示
要求:对以上进行简化,然后合并为同一个函数------设计思想(高阶函数)
def fn(num1, num2, f): # f代表要传入的参数(参数是一个函数名,如abs或round) return f(num1) + f(num2) # 绝对值求和 print(fn(-10, 10, abs)) # 四舍五入 print(fn(10.2, 6.9, round))
图示:
map()函数 -----返回的是列表
map(func, lst)
,将传入的函数 变量func 作用到 lst 变量的每个元素中,并将结果组成新的列表(Python2)/迭代器(Python3)返回。
lst 序列,
序列 :包括 字符串、列表、元组、集合以及字典。
lst = [1, 2, 3]
func函数:求某个数的平方,如输入2返回4,输入3返回9
map(func, lst)
返回结果[1, 4, 9]
注意:只对序列中的,列表、元组、集合有用。
# 定义一个函数 def func(n): return n ** 2 # 定义一个列表 list1 = [1, 2, 3] # 使用map对lst进行func函数操作 list2 = list(map(func, list1)) print(list2)
# 定义一个函数 def func(n): return n ** 2 # 定义一个列表----序列都可以:包括 字符串、列表、元组、集合以及字典。 list1 = [1, 2, 3] str1 = '1' # 定义一个 字符串 tuple1 = (1, 2, 3) # 定义一个 元组 set1 = {1, 2, 3} # 定义一个 集合 dict1 = {'name':'xiaoming', 'age': 18} # 定义一个 字典 # 使用map对lst进行func函数操作 print('下面是列表') list2 = list(map(func, list1)) print(list2) print('下面是元组') tuple2 = list(map(func, tuple1)) print(tuple2) print('下面是集合') set2 = list(map(func, set1)) print(set2)
reduce()函数
reduce(func,lst)
,其中func必须有两个参数。每次func计算的结果继续和序列的下一个元素做累加计算。-
注意:reduce()传入的参数func必须接收2个参数。
list1 = [1, 2, 3]
def func(a, b): # func必须有两个参数
return a + b
reduce(func,lst)
则把列表中的每个元素放入func中进行加工,然后进行累加操作
import functools # 要导包 # 定义一个函数 def func(a, b): return a + b # 也可以是 a - b a * b a / b # 定义一个列表 list1 = [10, 20, 30, 40, 50] sums = functools.reduce(func, list1) print(sums)
filter()函数
filter(func, lst)函数用于过滤序列, 过滤掉不符合条件的元素, 返回一个 filter 对象。如果要转换为列表, 可以使用 list() 来转换。
相关链接:Python算术运算符:加减乘除 整除// 取余(取模)% 幂指数** 小括号-CSDN博客
# 定义一个函数(获取所有的偶数) def func(n): return n % 2 == 0 # 取偶数,返回的是True和False # 定义一个序列----下面的1 2 3 依次放到上面的n里面,符合的就返回。 list1 = [1, 2, 3, 4, 5, 6, 7, 8] # 调用filter函数进行过滤操作 result = filter(func, list1) print(list(result))