自学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-装饰器的更多相关文章

  1. 自学Python4.4-装饰器的进阶

    自学Python之路-Python基础+模块+面向对象自学Python之路-Python网络编程自学Python之路-Python并发编程+数据库+前端自学Python之路-django 自学Pyth ...

  2. 自学Python4.5-装饰器举例

    自学Python之路-Python基础+模块+面向对象自学Python之路-Python网络编程自学Python之路-Python并发编程+数据库+前端自学Python之路-django 自学Pyth ...

  3. 自学Python4.3-装饰器固定格式

    自学Python之路-Python基础+模块+面向对象自学Python之路-Python网络编程自学Python之路-Python并发编程+数据库+前端自学Python之路-django 自学Pyth ...

  4. 自学Python4.6-迭代器

    自学Python之路-Python基础+模块+面向对象自学Python之路-Python网络编程自学Python之路-Python并发编程+数据库+前端自学Python之路-django 自学Pyth ...

  5. python--4、装饰器

    装饰器(Decorator) 使用场景:为被装饰器装饰的函数增加功能,但又不希望修改函数的定义,即在代码运行期间动态增加功能. 装饰器更多的用于后期功能升级而不是编写新的代码.装饰器不光能装饰函数,也 ...

  6. [Python自学] day-21 (2) (Cookie、FBV|CBV装饰器)

    一.什么是Cookie 1.什么是Cookie? Cookie是保存在客户端浏览器中的文件,其中记录了服务器让浏览器记录的一些键值对(类似字典). 当Cookie中存在数据时,浏览器在访问网站时会读取 ...

  7. TS 自学笔记(二)装饰器

    TS 自学笔记(二)装饰器 本文写于 2020 年 9 月 15 日 上一篇 TS 文章已经是很久之前了.这次来讲一下 TS 的装饰器. 对于前端而言,装饰器是一个陌生的概念,但是对于 Java.C# ...

  8. python自学第9天,装饰器

    装饰器:本质是函数(装饰其它函数) 就是为其它函数添加附加功能 原则:1.不能修改被装饰函数的源代码 2.不能修改被装饰的函数的调用方式 实现装饰器知识储备: 1.函数即变量 2.高阶函数:a.把一个 ...

  9. NO.4:自学python之路------内置方法、装饰器、迭代器

    引言 是时候开始新的Python学习了,最近要考英语,可能不会周更,但是尽量吧. 正文 内置方法 Python提供给了使用者很多内置方法,可以便于编程使用.这里就来挑选其中大部分的内置方法进行解释其用 ...

随机推荐

  1. python中filter(),reduce()函数

    filter()函数 是 Python 内置的另一个有用的高阶函数,filter()函数接收一个函数 和一个list,这个函数的作用是对每个元素进行判断,返回 True或 False,filter() ...

  2. Oracle和Elasticsearch数据同步

    Python编写Oracle和Elasticsearch数据同步脚本 标签: elasticsearchoraclecx_Oraclepython数据同步    Python知识库 一.版本 Pyth ...

  3. python-边练边学

    #换行print(a),print(b),print(c)'''以上是不换行打印以下是换行打印'''print(a)print(b)print(c) #注释#python中的注释有三种方式:单行注释 ...

  4. tomcat启动参数

    /usr/java/jdk1..0_191-amd64/bin/java -Djava.util.logging.config./conf/logging.properties -Djava.util ...

  5. 关于PHP的那些坑

    因为PHP是弱类型语言,常常会发生许多意想不到的问题,所以,我们再次一一细数这些我们踏过的坑!!! 1) foreach中自动回将key为数值的转化成整型,造成无法匹配 function transl ...

  6. react组件传值传方法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. mybatis源码分析(一)------------入门

    在进行源码分析前,先写一个使用mybatis进行开发的demo,方便我们后面进行分析. 一 关于mybatis的demo  pom.xml文件 <project xmlns="http ...

  8. php 删除一维数组中某一个值元素的操作方法

    1. 自己写for循环 从array里去掉$tmp这个元素的值 ? 1 2 3 4 5 6 7 8 9 10 <?php $tmp = '324'; $arr = array( '0' => ...

  9. CBV源码分析+APIVIew源码分析

    {drf,resful,apiview,序列化组件,视图组件,认证组件,权限组件,频率组件,解析器,分页器,响应器,URL控制器,版本控制} 一.CBV源码分析准备工作: 新建一个Django项目 写 ...

  10. change safari user agent

    defaults write com.apple.safari customuseragent '"mozilla/5.0 (iphone; cpu iphone os 8_1 like m ...