1.装饰器
1.1定义
装饰器的本质也是函数,他的作用主要是装饰其他函数,意思是为其他函数添加附加的功能。
1.2 原则
- 不能修改被装饰函数的源代码
- 不能修改被装饰函数的调用方式
1.3 实现装饰器的知识
- 函数是变量
- 高阶函数
- 嵌套函数
2. 函数是变量
def test(): print('test') demo = test # 函数和变量一样可以赋值给其他变量 print(demo) # 对应的是函数在内存中的地址 # <function test at 0x00000000004DCBF8> demo() # test
3. 高阶函数
什么函数可以被定义为高阶函数?
扫描二维码关注公众号,回复:
4495025 查看本文章
- 把一个函数的名称当做实参传递给另外一个函数
- 函数的返回值中拥有函数名称
3.1 函数名做实参
def add(x): return x * x def result(x,y,func):# 函数名称func作为实参传递给result函数 print(func(x) + func(y)) result(2,3,add) # 13
3.2 返回函数名
def add(x): return x * x def result(x,y,func): # 返回值中拥有函数名称func return func(x) + func(y) res = result(2,3,add) print(res) # 13
4. 嵌套函数
嵌套函数的形式是在一个函数中使用def关键字定义另外一个函数,并且在函数中返回调用。具体的代码如下。
def test(num): def add(x):# 定义函数和定义变量一样、一样、一样。划重点,可以把add()函数当做一个局部变量 num = x * x return num
return add(4) * num print(test(6)) # 96
5.实现装饰器
功能:定义一个函数,使用装饰器统计函数执行的时间
import time def timer(func): def test(): print('开始执行被装饰函数>>>>>') start_time = time.time() func() end_time = time.time() print('执行的时间为:',end_time - start_time) return test @timer # 相当于test = timer(test) def test(): time.sleep(2) # 睡2秒 print('in the test') test() 执行结果: 开始执行被装饰函数>>>>> in the test 执行的时间为: 2.031116008758545
6.装饰不同参数的函数
import time def timer(func): def test(*args,**kwargs): print('开始执行被装饰函数>>>>>') start_time = time.time() func(*args,**kwargs) # 装饰不同参数的函数 end_time = time.time() print('执行的时间为:',end_time - start_time) return test @timer def test(name,age = 26): time.sleep(2) # 睡2秒 print('我的名字是:',name,'年龄是:',age) test('wl') 执行结果: 开始执行被装饰函数>>>>> 我的名字是: wl 年龄是: 26 执行的时间为: 2.000115156173706