内置函数
把函数作为形参传入,这样的函数称为高阶函数,高阶函数是函数式编程的体现,函数式编程就是指这中高度抽象的编程范式
1 高阶函数
在学习高阶函数我们需要通过以下三个步骤去学习:
- 了解高阶函数如何书写,什么样的函数是高阶函数
- 体验高阶函数
- 体验高阶函数的作用
1.1 体验高阶函数
在 python 中,abs()
函数可以实现完成对数字求绝对值的计算
# 所谓的绝对值就是正数本身,如 -10 的绝对值就是 10
print(abs(-10))
[13:58:00 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
10
round()
函数可以完成对数字的四舍五入计算
print(round(10.2))
print(round(10.6))
[14:03:33 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
10
11
需求:
任意两个数字,按照指定要求整理数字后再进行求和计算,不管是负数还是正数都只去数字本身进行计算
- 方法一:
def sum_num(a,b):
# 返回时通过 abs 函数进行处理数据本身
return abs(a) + abs(b)
print(sum_num(10,-2))
[14:03:40 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
12
- 方法二:
# 但是再上面的方法一种,我们只能通过绝对值的方法实现,那么我像通过四舍五入实现的同时也可以实现绝对值数字的求和
# 传递 f 为函数的形参
def sum_num(a,b,f):
return f(a) + f(b)
# 四舍五入计算
print(sum_num(10.2,11.9,round))
# 取出正数计算
print(sum_num(-10,-20,abs))
[14:13:56 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
22
30
注意:
两种方法对比后,发现方法二的代码会更简洁,函数灵活度更高
函数式编程大量使用函数,减少代码的重复,因此程序比较短,开发速度较快
2 三个常用内置函数
2.1 内置 map 函数
map(func, list)
,将传入的函数变量func
作用到lst
变量的每个元素中,在 python2 解释器中返回列表,python 3 解释器中返回一个迭代器
注意:
在工作中都是基于python3.5 往上的版本使用,所以我们只需要了解迭代器即可
'''
map 函数接收两个参数,1 为函数,2 为列表
正确书写了 map 之后,会将参数 1 的函数作用于参数 2 中的 list 序列中的每一个数据
在 python2 解释器中返回列表,python 3 解释器中返回一个迭代器
也就是说 map 函数在 py2 py3 不同的解释器中返回的数据是不同的
'''
map(func,list)
需求:
计算 list1
序列各数字的 2 次方
'''
1.先传入 list
2.定义函数处理 2 次方即可
'''
# 定义列表
list1 = [1,2,3,4,5]
# 定义函数,实现 2 次方的处理
def func(x):
return x ** 2
# 返回迭代器给 result 变量
result = map(func,list1)
print(result)
# 通过list 将result 数据输出并看到确实已经是 2 次方
print(list(result))
[14:27:52 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
<map object at 0x7f62c1277ee0>
[1, 4, 9, 16, 25]
2.2 reduce() 函数
reduce(func,list)
,其中func
必须有两个参数。每次func
计算的结果继续和序列的下一个元素做累积计
注意:
reduce()
传入的参数func
必须接收2个参数
需求: 计算 list1
序列中各个数字的累加和。
'''
1.import 导入模块
2.定义功能函数
3.调用 reduce 作用:功能函数计算的结果和序列的下一个数据做累计相加
'''
# 导包 functools
import functools
list1 = [1,2,3,4,5]
# 定义函数实现返回 a+b ,用于下面 functools.reduce 使用的功能函数
def func(a,b):
return a + b
'''
functools.reduce:
reduce(函数,序列[,初始])->值
将两个参数的函数从左到右累积应用于序列的项,以便将序列缩减为单个值。
例如,reduce(lambda x,y:x+y,[1,2,3,4,5])计算((((1+2)+3)+4)+5)。如果存在initial,则将其放置在计算中序列的项目之前,并在序列为空时用作默认值。
'''
result = functools.reduce(func,list1)
print(result)
[14:28:06 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
15
2.3 filter() 函数
filter(func,list)
函数用于过滤序列,过滤掉不符合条件的元素,返回一个 filter
对象。如果要转换为列表可以使用 list()
来转换。也就是说使用 filter 函数过滤之后剩下的就是我们需要的数据
list1 = [1,2,3,4,5,6,7]
# 定义函数返回和 2 取模为 0 得数
def func(x):
return x % 2 == 0
# filter 函数将传入 func 实现对 list1 列表数据进行过滤 2 取模为 0 得数
result = filter(func,list1)
print(result)
print(list(result))
[13:51:43 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
<filter object at 0x7fc23bca6070>
[2, 4, 6]