使用python装饰器计算函数运行时间的实例

装饰器在python里面有很重要的作用, 如果能够熟练使用,将会大大的提高工作效率

今天就来见识一下 python 装饰器,到底是怎么工作的。

本文主要是利用python装饰器计算函数运行时间

一些需要精确的计算函数运行了多久的程序,都可以采用这种方法  
 

#coding:utf-8 

import urllib2,re,time,random,os,datetime

import HTMLParser

import sys 

reload(sys) 

sys.setdefaultencoding('utf-8') 

  

#计算时间函数 

def print_run_time(func): 

 def wrapper(*args, **kw): 

  local_time = time.time() 

  func(*args, **kw) 

  print 'current Function [%s] run time is %.2f' %
(func.__name__ ,time.time() - local_time) 

 return wrapper 

 

class test:

    def
__init__(self):

       
self.url=''

   
#获取网页页面内容

   
#即装饰器不管参数有多少,都能使用

   
@print_run_time

    def
get_html(self,url):

       
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.2; rv:16.0)
Gecko/20100101 Firefox/16.0'}#设置header

       
req = urllib2.Request(url=url,headers=headers)

       
try:

           
html = urllib2.urlopen(req).read().decode('utf-8')

           
html=HTMLParser.HTMLParser().(html)#处理网页内容, 可以将一些html类型的符号如"
转换回双引号

           
#html =
html.decode('utf-8','replace').encode(sys.getfilesystemencoding())#转码:避免输出出现乱码

except urllib2.HTTPError,e:

           
print(2,u"连接页面失败,错误原因: %s" % e.code)

           
return None

       
except urllib2.URLError,e:

           
if hasattr(e,'reason'):

               
print(2,u"连接页面失败,错误原因:%s" % e.reason)

               
return None

       
return html

       
 

   
#在类的内部使用装饰器

   
@print_run_time

    def
run(self):

       
self.url='http://www.baidu.com'

       
self.get_html(self.url)

       
print 'end'

       
 

#在外面直接使用装饰器

@print_run_time

def get_current_dir(spath):

   
#spath=os.getcwd()

   
#spath=os.path.abspath(os.curdir)

       
 

    for schild
in os.listdir(spath): 

       
schildpath=spath '/' schild 

       
if os.path.isdir(schildpath): 

           
get_current_dir(schildpath) 

       
else: 

           
print schildpath 

   
 

if __name__ == '__main__':

   
my_test=test()

   
my_test.run()

   
spath=os.path.abspath('.')

   
get_current_dir(spath)



运行结果:    

current Function [get_html] run time is
0.29 

end 

current Function [run] run time is 0.29 

05.python_study/03.decorator.py 

current Function [get_current_dir] run time is 0.00



以上这篇使用python装饰器计算函数运行时间的实例就是小编分享给大家的全部内容了

使用python装饰器计算函数运行时间的实例的更多相关文章

  1. python调用时间装饰器检测函数运行时间

    用一个装饰器,监控程序的运行时间 import time def count_time(func): def int_time(*args, **kwargs): start_time = time. ...

  2. 关于Python装饰器内层函数为什么要return目标函数的一些个人见解

    https://blog.csdn.net/try_test_python/article/details/80802199 前几天在学装饰器的时候,关于装饰器内层函数调用目标函数时是否return目 ...

  3. Python 装饰器(Decorators) 超详细分类实例

        Python装饰器分类 Python 装饰器函数: 是指装饰器本身是函数风格的实现; 函数装饰器: 是指被装饰的目标对象是函数;(目标对象); 装饰器类 : 是指装饰器本身是类风格的实现; 类 ...

  4. Python 装饰器 property() 函数

    描述:property() 函数的作用是在新式类中返回属性值. @property 装饰器简单理解就是负责把一个方法变成属性调用 下面理解property()方法语法: class property( ...

  5. Python装饰器基础及运行时间

    一.装饰器基础 装饰器是可调用的对象,其参数是另一个函数(被装饰的函数).装饰器可能会处理被装饰的函数,然后把他返回,或者将其替换成另一个函数或可调用对象. eg:decorate装饰器 @decor ...

  6. Python装饰器(函数)

    闭包 1.作用域L_E_G_B(局部.内嵌.全局...): x=10#全局 def f(): a=5 #嵌套作用域 def inner(): count = 7 #局部变量 print a retur ...

  7. python clock装饰器 计算函数执行时间,执行结果及传入的参数

    import time import functools def clock(func): @functools.wraps(func)#还原被装饰函数的__name__和__doc__属性 def ...

  8. python装饰器三种装饰模式的简单理解

    学设计模式中有个装饰模式,用java实现起来不是很难,但是远远没有python简单,难怪越来越火了! 这里就简单讨论下python的几种装饰模式: 一 无参装饰器: # 装饰器 import time ...

  9. python 装饰器统计某个函数的运行时间

    import datetime def count_time(func): def int_time(*args, **kwargs): start_time = datetime.datetime. ...

随机推荐

  1. idea 设置Terminal为git终端

  2. C#中 委托和事件的关系

    首先,委托 是一个好东西.按我的理解,委托 是针对 方法 的更小粒度的抽象.比较interface,他精简了一些代码.使得 订阅-通知 (观察者模式)的实现变得非常简洁. 关于事件,我最初的理解是:事 ...

  3. HTML5新特性——1 HTML5音频

    注意:<source>同一个音乐可以添加不同格式的音频,这样就可以满足不同浏览器都能够正常播放,兼容不同浏览器. 代码示例: <!doctype html> <html ...

  4. bzoj4009: [HNOI2015]接水果(整体二分)

    题目描述 风见幽香非常喜欢玩一个叫做 osu!的游戏,其中她最喜欢玩的模式就是接水果.由于她已经DT FC 了The big black, 她觉得这个游戏太简单了,于是发明了一个更加难的版本. 首先有 ...

  5. MFC 类内线程函数

    线程函数必须是全局函数或静态成员函数. 非静态成员函数都有一个隐含的参数用于接收所属类的this指针,一般情况下调用时参数不匹配.所以static可以干掉隐含的参数. 但是没有了this,类内的函数就 ...

  6. 题解 BZOJ1026 & luogu P2657 [SCOI2009]windy数 数位DP

    BZOJ & luogu 看到某大佬AC,本蒟蒻也决定学习一下玄学的数位$dp$ (以上是今年3月写的话(叫我鸽神$qwq$)) 思路:数位$DP$ 提交:2次 题解:(见代码) #inclu ...

  7. 头条编程题 万万没想到之抓捕孔连顺 JavaScript

    [编程题] 万万没想到之抓捕孔连顺 时间限制:1秒 空间限制:131072K 我叫王大锤,是一名特工.我刚刚接到任务:在字节跳动大街进行埋伏,抓捕恐怖分子孔连顺.和我一起行动的还有另外两名特工,我提议 ...

  8. Call JMS Web Service

    The content type application/json of the response message does not match the content type of the bin ...

  9. aarch-linux-gnu-g++ install

    # apt install g++-aarch64-linux-gnuReading package lists... 0% Reading package lists... Done Buildin ...

  10. HDU - 6150 构造题

    最近的vj好垃圾,老崩,实名吐槽 HDU - 6150 题意:给出一个错误的求最小点覆盖的函数,需要来构造一组样例,使得那个函数跑出来的答案是正解的3倍以上. 很巧妙的构造技巧,首先想法就是弄一个二分 ...