一、什么是装饰器
装饰:装饰既修饰,意指为其他函数添加新功能
器:器既函数
装饰器定义:本质就是函数,功能是为其他函数添加新功能
二、装饰器需要遵循的原则
1、不能修改装饰器的源代码(开放封闭原则)
2、为装饰器函数添加新功能后,不能修改函数的调用方式
三、实现装饰器的知识储备
装饰器 = 高阶函数 + 函数嵌套 + 闭包
四、高阶函数
高阶函数的定义:
1、函数接收的参数是一个函数名
2、函数的返回值是一个函数名
3、满足上述条件任意一个,都可以称为之高阶函数
1 def foo(): 2 print(‘我的函数名作为参数传给高阶函数‘) 3 def gao_jie1(func): 4 print(‘我就是高阶函数1,我接收的参数名是%s‘ %func) 5 func() 6 7 def gao_jie2(func): 8 print(‘我就是高阶函数2,我的返回值是%s‘ %func) 9 return func 10 11 gao_jie1(foo) 12 gao_jie2(foo)
高阶函数示范
1 #高阶函数应用1:把函数名当做参数传给高阶函数 2 import time 3 def foo(): 4 print(‘from the foo‘) 5 6 def timmer(func): 7 start_time=time.time() 8 func() 9 stop_time=time.time() 10 print(‘函数%s 运行时间是%s‘ %(func,stop_time-start_time)) 11 timmer(foo) 12 #总结:我们确实为函数foo增加了foo运行时间的功能,但是foo原来的执行方式是foo(),现在我们需要调用高阶函数timmer(foo),改变了函数的调用方式
把函数名当做参数传给高阶函数
1 #高阶函数应用2:把函数名当做参数传给高阶函数,高阶函数直接返回函数名 2 import time 3 def foo(): 4 print(‘from the foo‘) 5 6 def timmer(func): 7 start_time=time.time() 8 return func 9 stop_time=time.time() 10 print(‘函数%s 运行时间是%s‘ %(func,stop_time-start_time)) 11 foo=timmer(foo) 12 foo() 13 #总结:我们确实没有改变foo的调用方式,但是我们也没有为foo增加任何新功能
函数返回值是函数名
高阶函数总结:
1、函数接收的参数是一个函数名
作用:在不修改函数源代码的前提下,为函数添加新功能
不足:会改变函数的调用方式
2、函数的返回值是一个函数名
作用:不修改函数的调用方式
不足:不能添加新功能
五、函数嵌套
def foo(name): print("from foo %s" %name) def ret(): print("from ret") def bar(): print("from bar") bar() ret() foo("Albert")
原文地址:https://www.cnblogs.com/albert0924/p/8760575.html
时间: 2024-10-16 14:04:01