使用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. 打开myeclipse提示An internal error occurred during: "CheckLicensesAndNotify". com/genuitec/pulse2/client/targetcfg/ui/PulseActivator

    打开myeclipse提示An internal error occurred during: "CheckLicensesAndNotify". com/genuitec/pul ...

  2. kvm批量创建虚拟主机

    1.首先你的提前创建一个kvm虚拟机主机,才能批量复制创建 批量复制已经安装好的系统盘 `;.img centos7-$i.img && echo $i ;done 批量复制已经安装好 ...

  3. 二叉堆的介绍和Java实现

    一.堆和二叉堆 堆,英文名称Heap,所谓二叉堆(也有直接称二叉堆为堆的),本质上是一个完全二叉树,前面也提到过,如果树接近于完全二叉树或者满二叉树,采用顺序存储代价会小一点,因此常见的二叉堆均是顺序 ...

  4. redis主从+哨兵 安装配置二

    实验环境: 192.168.2.201 centos7 master sentinel 192.168.2.202 centos7 slave   sentinel 192.168.2.203 cen ...

  5. Cow Hopscotch (单调队列 + DP)

    链接:https://ac.nowcoder.com/acm/contest/1113/K来源:牛客网 The cows have reverted to their childhood and ar ...

  6. Modbus通讯协议

    <ignore_js_op> O1CN01P1wxTI1dCdw5nAeMO_!!85243700.jpg (287.43 KB, 下载次数: 0) 下载附件  保存到相册 2019-6- ...

  7. Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'

    方法:重启MySQL 在命令行执行: /etc/init.d/mysql start

  8. 洛谷P1026 统计单词个数【区间dp】

    题目:https://www.luogu.org/problemnew/show/P1026 题意: 给定一个字符串,要求把他分成k段.给定s个单词,问划分成k段之后每段中包含的单词和最大是多少. 一 ...

  9. Kafka中的消息是否会丢失和重复消费(转)

    在之前的基础上,基本搞清楚了Kafka的机制及如何运用.这里思考一下:Kafka中的消息会不会丢失或重复消费呢?为什么呢? 要确定Kafka的消息是否丢失或重复,从两个方面分析入手:消息发送和消息消费 ...

  10. [Javascript] Correctly Type-Checking Numbers

    There are two ways to correctly type checks number: console.log(typeof 99.66); // number console.log ...