# 高阶函数# 接收函数作为参数,或者将函数作为返回值返回的函数就是高阶函数deffun_1(a, b):# 函数一:计算a,b的和
c = a + b
return c
# 接收函数作为参数的高阶函数deffun_2(fun, n, a, b):# 函数二:计算n倍fun(a,b)的值
d = n * fun(a, b)return d
result1 = fun_2(fun_1,2,3,7)print(result1)#20# 将函数作为返回值返回的高阶函数deffun_3(a,b):return fun_1(a,b)
result2 = fun_3(2,5)print(result2)#7
2.闭包
将函数作为返回值也是高阶函数我们也称为闭包
闭包的好处
通过闭包可以创建一些只有当前函数能访问的变量
可以将一些私有数据藏到闭包中
行成闭包的条件
函数嵌套
将内部函数作为返回值返回
内部函数必须要使用到外部函数的变量
# 闭包# 创建一些只有当前函数能访问的变量,可以将一些私有数据藏到闭包中defmy_fun(a, b):
c =10#内部定义了函数,形成函数嵌套defin_fun(a, b, c):# 用到了外部变量a,b# c只能由in_fun函数访问,不能从函数外访问
d =(a + b)* c
return d
# 将函数作为返回值返回return in_fun(a, b, c)print(my_fun(2,5))# 70
3.装饰器的引入
我们可以直接通过修改函数中的代码来完成需求,但是会产生以下一些问题
如果修改的函数多,修改起来会比较麻烦
不方便后期的维护
这样做会违反开闭原则(ocp)
程序的设计,要求开发对程序的扩展,要关闭对程序的修改
# 装饰器的引入# def my_fun(*num):# #求和函数# s = 0# for i in num:# s += i# return s# print(my_fun(1,2,3,4,5,6,7)) #28# 修改函数,实现新功能deffun(*num):#连乘函数
s =1for i in num:
s *= i
return s
print(fun(1,4,5,6))#120# 在内部进行了修改,违反ocp原则