#-*-coding=utf-8 -*-

__author__ = ‘piay‘

importtime, functoolsdeffoo():‘‘‘定义一个普通函数

:return:‘‘‘

print ‘this is foo‘foo()‘‘‘这里如果我们需要查看函数执行时间,修改为:‘‘‘

deffoo1():

start_time=time.clock()print ‘this is foo1‘end_time=time.clock()print ‘执行时间为:‘, end_time -start_time

foo1()‘‘‘如果我们其他的函数也需要执行时间,或者这个函数不需要执行时间,那么我们就需要复制到其他的函数中去

这是一种最差的方法‘‘‘

deffoo3():print ‘this is foo3‘

deftimeit(func):‘‘‘我们可以考虑重新定义一个函数timeit,将foo的引用传递给他,

然后在timeit中调用foo并进行计时,这样,我们就达到了不改动foo定义的目的

:param func: 传入的函数

:return:‘‘‘start_time=time.clock()

func()

end_time=time.clock()print ‘used:‘, end_time -start_time

timeit(foo3)‘‘‘这样写修改调用部分的代码。原本我们是这样调用的:foo3(),现在变成timeit(foo),这样的话,如果foo在N处都被调用了,

你就不得不去修改这N处的代码。或者更极端的,考虑其中某处调用的代码无法修改这个情况,比如:这个函数是你交给别人使用的。‘‘‘

‘‘‘想想办法不修改调用的代码;如果不修改调用代码,也就意味着调用foo()需要产生调用timeit(foo)的效果。我们可以想到将timeit赋值给foo,

但是timeit似乎带有一个参数……想办法把参数统一吧!如果timeit(foo)不是直接产生调用效果,

而是返回一个与foo参数列表一致的函数的话……就很好办了,将timeit(foo)的返回值赋值给foo,然后,调用foo()的代码完全不用修改!‘‘‘

deffoo4():print ‘this is foo4‘

#定义一个计时器,传入一个,并返回另一个附加了计时功能的方法

deftimeit4(func):#定义一个内嵌的包装函数,给传入的函数加上计时功能的包装

defwrapper():

start_time=time.clock()

func()

end_time=time.clock()print ‘used:‘, end_time -start_time#将包装后的函数返回

returnwrapper

foo_1=timeit(foo4)‘‘‘上面的代码就类似装饰器了,可以修改为如下:‘‘‘@timeit4#定义上加上这一行与另外写foo = timeit(foo)完全等价

deffoo5():print ‘this is foo5‘foo5()‘‘‘-----------------------------------------------

使用functools.wraps(func)装饰器实现功能‘‘‘

deftimeit_3_for_wraps(func):

@functools.wraps(func)defwrapper():

start=time.clock()

func()

end=time.clock()print ‘used:‘,end-startreturnwrapper

@timeit_3_for_wrapsdeffoo6():print ‘this is foo6‘foo6()

python wraps模块_python functools.wraps装饰器模块相关推荐

  1. python三大器_python三大器(装饰器/生成器/迭代器)

    1装饰器 1.1基本结构 def 外层函数(参数): def 内层函数(*args,**kwargs); return 参数(*args,**kwargs) return 内层函数 @外层函数 def ...

  2. python装饰器与闭包_python闭包与装饰器

    本文针对: 学不会,学过即忘,学完跑路 的相关python人群. 一.Python闭包 定义: 访问了定义体以外的定义的非全局变量.(刚学时看不懂这句话太TM正常了) 定义解析: 其实就是函数里面再定 ...

  3. python什么是装饰器_python学习之装饰器是什么?

    学完python函数,接下来我们跟着猿人学python一起来看看什么是装饰器. 大家应该多多少少在其它地方有看过或是听过"装饰器"这个词.装饰器,顾名思义,就是用来装饰的,它装饰的 ...

  4. [python 进阶] 第7章 函数装饰器和闭包

    文章目录 7.1 装饰器基础知识 7.2 Python何时执行装饰器 7.3 使用装饰器改进"策略" 7.4 变量作用域(global) 备注 -比较字节码(暂略) 7.5 闭包 ...

  5. python 类的使用(5)之类装饰器(类的装饰器和类作为装饰器)

    在阅读博客中,发现了类装饰器的存在,由于之前就在写类相关的专栏,这次就赶紧补上之前的内容啦.类装饰器这个词是有歧义的,因为类本身可以作为装饰器,一个类也可以被函数装饰器所装饰.今天就简单介绍一下这两种 ...

  6. python function at 0x00000_《fluent python》第七章 函数装饰器和闭包

    前言 函数装饰器用于在代码中"标记"函数,以某种方式增强函数的行为. 想理解与掌握这一功能必须先理解闭包:除此之外,闭包还是回调式异步编程和函数式编程风格的基础 装饰器 装饰器是可 ...

  7. python四大高阶函数_详谈Python高阶函数与函数装饰器(推荐)

    一.上节回顾 Python2与Python3字符编码问题,不管你是初学者还是已经对Python的项目了如指掌了,都会犯一些编码上面的错误.我在这里简单归纳Python3和Python2各自的区别. 首 ...

  8. Python小知识点(3)--装饰器

    Python小知识点(3)--装饰器 (1)装饰器含参数,被装饰函数不含(含)参数 实例代码如下: import time # 装饰器函数 def wrapper(func):def done(*ar ...

  9. python wraps模块_python中 wraps 的作用

    这里使用两段代码比较加入wraps装饰器后,函数打印的结果对比: 新建文件名:Testword 代码1:不加wraps装饰器 # coding=utf-8 from functools import ...

  10. python 装饰器 继承_Python设计模式之装饰器模式

    装饰器模式 无论何时我们想对一个对象添加额外的功能,都有下面这些不同的可选方法. 如果合理,可以直接将功能添加到对象所属的类(例如,添加一个新的方法) 使用组合 使用继承 注意,本文中的Decorat ...

最新文章

  1. Direct2D开发:Direct2D 和 GDI 互操作性概述
  2. docker from指令的含义_Docker中Dockerfile多From 指令存在的意义
  3. 今天谈一谈python自动化测试中使用异步
  4. Vue.js 从 Vue Router 0.7.x 迁移
  5. python 生成html文件浏览器_python如何将数据生成html文件+浏览器中文显示乱码问题...
  6. 为Java应用程序加上退出事件处理(ShutdownHook)
  7. android 手机内存uri_android 的各种目录详解
  8. 基于短视频的人脸解析比赛
  9. 安装nokogiri前提
  10. 萌新误入AI歧途怎么办?MIT博士小哥哥给你指条明路
  11. Java面向对象:对象的概念及面向对象的三个基本特征
  12. 【原创】查找原始MySQL死锁ID
  13. 面试题之Servlet工作原理
  14. 详解C3P0(数据库连接池)
  15. IDEA利用wsdl文件生成WebService调用接口的方法
  16. 计算机分区硬盘有写保护,如何去掉磁盘写保护实测方法
  17. java 抽样算法_java生成抽样随机数的多种算法
  18. linux如何后台执行程序?
  19. 关于微信异常烦人自动生成的聊天记录截图视频
  20. HDOJ--1162--Eddy's picture

热门文章

  1. Chap 06 HTML使用表格
  2. 【java与智能设备】01_1Android简介与环境搭建
  3. golang 格式“占位符”%d,%f,%s等应用类型
  4. mybatis中的三种多表查询的方式详解,业务装配,N+1,多表查询的sql
  5. 什么是Http无状态协议?
  6. 重置浏览器的css,css重置浏览器默认样式
  7. LintCode—删除链表中的元素(452)
  8. 【转】解决Navicat 报错:1130-host ... is not allowed to connect to this MySql server,MySQL不允许从远程访问的方法 .
  9. vue-router个人总结
  10. 《网页设计技巧》系列之一 浅谈文本排版