Python自学之乐-装饰器浅谈

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python自学之乐-装饰器浅谈相关的知识,希望对你有一定的参考价值。

以前学过点 面向对象的知识,我感觉这之间是有关联的,比如说装饰器的第一个要素是对被装饰的函数的封闭性,不允许更改;第二个就是对装饰器本oj身的可扩展性。

装饰器要点:高阶函数+嵌套函数=装饰器

需要掌握的知识点:1、函数即变量

2、高阶函数(函数的参数也是函数)

3、嵌套函数

装饰器一:装饰器不带参数,被装饰的函数也不带参数

简单的需求:现有两个简单的打印内容的函数,现在需要在不改变两个函数源代码的情况下统计每个函数运行时间

import time
def timer(func):#用到高阶函数
def deco():#用到函数嵌套
start_time = time.time()
func()
stop_time = time.time()
print("the func run %s" %(stop_time-start_time))
return deco
@timer
def test1():
time.sleep(3)
print("i am test1")
@timer
def test2():
time.sleep(3)
print("i am test2")
test1()
test2()
执行顺序:首先程序自上往下走,走到定义的timer函数的时候会跳到@timer处,检测到timer被作为装饰器了,系统会去搜索哪些地方使用了timer作为装饰器,搜索完成后,执行timer;紧接着执行我们调用的test1(),因为test1被timer装饰了,所以会先去执行装饰器,在装饰器内部执行到func()时,此时func()就是test1()! test2()也是一样
装饰器的效果就是:没有改变原来函数的源代码和函数调用方式,又给函数增加了新功能

装饰器二:被装饰函数带参数
装饰器三:被装饰函数有返回值
装饰器四:装饰器本身带参数





























以上是关于Python自学之乐-装饰器浅谈的主要内容,如果未能解决你的问题,请参考以下文章

Python自学之乐-多继承顺序问题

Python自学之乐-继承的新式类与经典类

Python自学之乐-python 2python 3中经典类新式类的深度和广度优先小结

浅谈Python装饰器

浅谈自学Python之路(day1)

python使用上下文对代码片段进行计时,非装饰器