自学Python4.2-装饰器
自学Python之路-Python基础+模块+面向对象
自学Python之路-Python网络编程自学Python之路-Python并发编程+数据库+前端自学Python之路-django
自学Python4.2 - 装饰器
time.time() # 获取当前时间
time.sleep(10) #让程序在执行到这个位置的时候停10s
1.简单列子: 计算一段代码的执行时间
代码1:
import time
print(time.time())
def func(): # 被装饰的函数
start = time.time() # 获取开始的时间
print('我好喜欢大家啊 ~~') # 测试时间的代码
end = time.time()
print(end-start)
func()

代码2:
由于执行代码的速度太快,没有体现出来结果,这是可以使用 time.sleep(10) 加大代码执行的时间。
import time
print(time.time())
def func(): # 被装饰的函数
start = time.time() # 获取开始的时间
print('我好喜欢大家啊 ~~') # 测试时间的代码
time.sleep(0.01)
end = time.time()
print(end-start)
func()

代码3:
为了让函数func()完全分离出来,现在定义一个新函数timmer(),主要用于计算函数的执行时间(开始的时间,结束时间,执行的函数)
import time
print(time.time())
def func(): # 被装饰的函数
time.sleep(0.01)
print('我好喜欢大家啊 ~~') # 测试时间的代码
def timmer(func): #装饰函数
start = time.time() # 获取开始的时间
func()
end = time.time()
print(end-start) timmer(func) #执行timmer,而且是执行参数func的函数

代码4: 装饰器
其实上面的例子,真正环境下是存在问题的。 应该最终调用func(), 最好调用func()时候实质是调用timmer()
- 装饰器的作用:不想修改函数的调用方式,但是还想再原来的函数前后添加功能
- 装饰器的开发原则:开放封闭原则
- 装饰器的本质:闭包函数
- 以上例子timmer就是一个装饰器函数,只是对一个函数有一些装饰作用
函数的闭包定义:
在函数内部再定义一个函数,并且这个函数用到了外边函数的变量,那么将这个函数以及用到的一些变量称之为闭包。

装饰器本质上就是一个python闭包函数,他可以让其他函数在不需要做任何代码变动的前提下,增加额外的功能,装饰器的返回值也是一个函数对象。
装饰器的应用场景:比如插入日志,性能测试,事务处理,缓存等等场景。
import time
print(time.time())
def func():
time.sleep(0.01)
print('我好喜欢大家啊 ~~') def timmer(f): #装饰器函数
def inner():
start = time.time()
f() #被装饰的函数
end = time.time()
print(end - start)
return inner
func = timmer(func)
func() # 其实执行的是inner()


2.编码原则: 开放封闭原则
- 开放:对扩展是开放的
- 封闭:对修改是封闭的(封板)
3.装饰器---语法糖
import time
print(time.time()) def timmer(f): #装饰器函数
def inner():
start = time.time()
f()
end = time.time()
print(end - start)
return inner
@timmer #语法糖 @装饰器的函数 ,相当于func = timmer(func)
def func(): #被装饰的函数
time.sleep(0.01)
print('我好喜欢大家啊 ~~') func()

自学Python4.2-装饰器的更多相关文章
- 自学Python4.4-装饰器的进阶
自学Python之路-Python基础+模块+面向对象自学Python之路-Python网络编程自学Python之路-Python并发编程+数据库+前端自学Python之路-django 自学Pyth ...
- 自学Python4.5-装饰器举例
自学Python之路-Python基础+模块+面向对象自学Python之路-Python网络编程自学Python之路-Python并发编程+数据库+前端自学Python之路-django 自学Pyth ...
- 自学Python4.3-装饰器固定格式
自学Python之路-Python基础+模块+面向对象自学Python之路-Python网络编程自学Python之路-Python并发编程+数据库+前端自学Python之路-django 自学Pyth ...
- 自学Python4.6-迭代器
自学Python之路-Python基础+模块+面向对象自学Python之路-Python网络编程自学Python之路-Python并发编程+数据库+前端自学Python之路-django 自学Pyth ...
- python--4、装饰器
装饰器(Decorator) 使用场景:为被装饰器装饰的函数增加功能,但又不希望修改函数的定义,即在代码运行期间动态增加功能. 装饰器更多的用于后期功能升级而不是编写新的代码.装饰器不光能装饰函数,也 ...
- [Python自学] day-21 (2) (Cookie、FBV|CBV装饰器)
一.什么是Cookie 1.什么是Cookie? Cookie是保存在客户端浏览器中的文件,其中记录了服务器让浏览器记录的一些键值对(类似字典). 当Cookie中存在数据时,浏览器在访问网站时会读取 ...
- TS 自学笔记(二)装饰器
TS 自学笔记(二)装饰器 本文写于 2020 年 9 月 15 日 上一篇 TS 文章已经是很久之前了.这次来讲一下 TS 的装饰器. 对于前端而言,装饰器是一个陌生的概念,但是对于 Java.C# ...
- python自学第9天,装饰器
装饰器:本质是函数(装饰其它函数) 就是为其它函数添加附加功能 原则:1.不能修改被装饰函数的源代码 2.不能修改被装饰的函数的调用方式 实现装饰器知识储备: 1.函数即变量 2.高阶函数:a.把一个 ...
- NO.4:自学python之路------内置方法、装饰器、迭代器
引言 是时候开始新的Python学习了,最近要考英语,可能不会周更,但是尽量吧. 正文 内置方法 Python提供给了使用者很多内置方法,可以便于编程使用.这里就来挑选其中大部分的内置方法进行解释其用 ...
随机推荐
- iOS iCloud云存储数据
https://www.jianshu.com/p/ce8cfaf6030e 2017.11.29 16:05* 字数 452 阅读 302评论 0喜欢 1 因为上一次做了用keychain来持久化存 ...
- Dapper.NET
关于Dapper.NET的相关论述 年少时,为何不为自己的梦想去拼搏一次呢?纵使头破血流,也不悔有那年少轻狂.感慨很多,最近事情也很多,博客也很少更新了,毕竟每个人都需要为自己的生活去努力. 最近 ...
- tortoisegit密钥与git密钥配置
在客户端生成密钥并将公钥上传到服务器可以避免每次连接git服务器都要登录的尴尬. 但git的私钥是不能直接用在tortoisegit上的,需要用tortoisegit的puttygen转换一下,详细过 ...
- BOM、DOM
window对象 所有浏览器都支持window对象,他表示浏览器窗口. 全局变量是window对象的属性.全局函数是window对象的方法. window的常用方法: window.innerHeig ...
- 设置永久环境变量linux
========================================================================== http://www.cnblogs.com/Bi ...
- windows中dir命令
最近想用dos命令打印指定目录下的所有文件夹的完整路径.最终发现可用dir命令来实现.在此学习下dir的各项命令. 32位win7系统上,打印帮助文档. D:\test>dir /? 显示目录中 ...
- HTTL之初印象
概述 HTTL (Hyper-Text Template Language) 是一个高性能的开源JAVA模板引擎, 适用于动态HTML页面输出, 可替代JSP页面, 指令和Velocity相似. 简洁 ...
- html5 datalist 选中option选项后的触发事件
使用input + datalist 实现自动补全功能,其中datalist中的内容是根据input输入的内容动态变换的,代码如下 <!DOCTYPE HTML> <html> ...
- RDD
scala> val rdd1=sc.parallelize(Array("coffe","coffe","hellp"," ...
- Git发生SSL certificate problem: certificate ha错误的解决方法
这两天,不知道为什么,用Git提交代码到服务器时,总出现SSL certificate problem: unable to get local issuer certificate while ac ...