1.高阶函数
1.1什么是高阶函数?
- 第一个特点 接收一个或者多个函数作为参数
- 第二个特点 将函数作为函数值返回(也称为闭包)
- 以上特点符合一个,就为高阶函数
当我们使用一个函数作为参数,实际上是指将指定的代码传递进了目标函数
'''
定义一个函数
可以将指定的列表中的所有偶数,
保存到一个新的列表中返回
'''
list = [1,2,3,4,5,6,7,8,9,10]
# 定义一个函数 用来检测一个偶数
def fn1(j):
if j % 2 == 0:
return True
# 定义一个 查找3的倍数的函数
def fn3(n):
if n % 3 == 0:
return True
# 定义一个大于5的函数
def fn2(k):
if k > 5:
return True
return False
'''
当我们使用一个函数作为参数,
实际上是指将指定的代码传递进了目标函数
'''
def fn (func,list):
# 参数func 调用的函数
# list 要进行筛选列表
# 创建一个新的列表
new_list = []
for i in list:
if func(i):
new_list.append(i)
return new_list
print(fn(fn3,list)) # [3, 6, 9]
2.闭包
- 通过闭包可以创建一些只有当前函数能访问的变量
- 可以将一些私有数据藏到闭包中
# 求多个数的平均值
def make_average():
nums = []
#定义一个函数计算平均值
def average(i):
#将num添加到列表中
nums.append(i)
#求平均值
return sum(nums)/len(nums)
return average
vaule = make_average()
print(vaule(1),vaule(2),vaule(3)) #
- 形成闭包的条件
- 函数嵌套
- 内部函数作为返回值返回
- 内部函数必须使用外部函数的变量
3.装饰器的引入
当我直接修改某个程序时,直接修改会残生几个问题:
- 如果修改的函数较多,修改起来非常麻烦
- 不方便后期维护
- 直接修改违反开闭原则(ocp)
- 程序设计要求开发对程序的扩展 要关闭对程序的修改
4.装饰器的引用
- 简单地说,装饰器可以不改变原函数的情况下,来对函数进行扩展。
"""
用来对其他函数进行扩展
在函数执行的时候 提示开始执行
执行完毕提示 提示执行完毕
"""
def fn():
print("我是fn函数")
# 求任意两个数的和
def add(a,b):
return a + b
"""
start_end(old) 函数就是装饰器
"""
def start_end(old):
# 参数 old 表示要扩展的函数
# 创建一个新函数
def new_function(*args,**kwargs):
print("开始执行")
result = old(*args,**kwargs)
print("执行完毕")
return result
return new_function
f = start_end(add)
r = f(15,56)
print(r) #执行结果如下
'''
开始执行
执行完毕
71
'''
@start_end # 另一种调用方法法
# 求任意两个数的积
def mul(a,b):
return a * b
k = mul(15,56)
print(k) #执行结果如下
'''
开始执行
执行完毕
840
'''