自学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提供给了使用者很多内置方法,可以便于编程使用.这里就来挑选其中大部分的内置方法进行解释其用 ...
随机推荐
- python中filter(),reduce()函数
filter()函数 是 Python 内置的另一个有用的高阶函数,filter()函数接收一个函数 和一个list,这个函数的作用是对每个元素进行判断,返回 True或 False,filter() ...
- Oracle和Elasticsearch数据同步
Python编写Oracle和Elasticsearch数据同步脚本 标签: elasticsearchoraclecx_Oraclepython数据同步 Python知识库 一.版本 Pyth ...
- python-边练边学
#换行print(a),print(b),print(c)'''以上是不换行打印以下是换行打印'''print(a)print(b)print(c) #注释#python中的注释有三种方式:单行注释 ...
- tomcat启动参数
/usr/java/jdk1..0_191-amd64/bin/java -Djava.util.logging.config./conf/logging.properties -Djava.util ...
- 关于PHP的那些坑
因为PHP是弱类型语言,常常会发生许多意想不到的问题,所以,我们再次一一细数这些我们踏过的坑!!! 1) foreach中自动回将key为数值的转化成整型,造成无法匹配 function transl ...
- react组件传值传方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- mybatis源码分析(一)------------入门
在进行源码分析前,先写一个使用mybatis进行开发的demo,方便我们后面进行分析. 一 关于mybatis的demo pom.xml文件 <project xmlns="http ...
- php 删除一维数组中某一个值元素的操作方法
1. 自己写for循环 从array里去掉$tmp这个元素的值 ? 1 2 3 4 5 6 7 8 9 10 <?php $tmp = '324'; $arr = array( '0' => ...
- CBV源码分析+APIVIew源码分析
{drf,resful,apiview,序列化组件,视图组件,认证组件,权限组件,频率组件,解析器,分页器,响应器,URL控制器,版本控制} 一.CBV源码分析准备工作: 新建一个Django项目 写 ...
- change safari user agent
defaults write com.apple.safari customuseragent '"mozilla/5.0 (iphone; cpu iphone os 8_1 like m ...