使用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. 自定义ViewGroup基础巩固1---理解onLayout()方法

    自定义ViewGroup这个是在android中自定义控件中不可获缺的很重要的一部分,关于它的意义这里就不过多阐述了,为了在未来深入上继续走下去,所以先把基础给打牢. 这篇主要是理解ViewGroup ...

  2. BZOJ 3772: 精神污染 (dfs序+树状数组)

    跟 BZOJ 4009: [HNOI2015]接水果一样- CODE #include <set> #include <queue> #include <cctype&g ...

  3. 【LuoguP4482】[BJWC2018]Border 的四种求法

    题目链接 题意 区间 boder \(n,q\leq 2*10^5\) Sol (暴力哈希/SA可以水过) 字符串区间询问问题,考虑用 \(SAM\) 解决. boder相当于是询问区间 \([l,r ...

  4. P2051 [AHOI2009]中国象棋 大力DP

    状压个啥$qwq$ 思路:大力$DP$ 提交:2次(自信的开了$int$) 题解:(见注释) #include<cstdio> #include<iostream> using ...

  5. offset([coordinates])

    offset([coordinates]) 概述 获取匹配元素在当前视口的相对偏移. 返回的对象包含两个整型属性:top 和 left,以像素计.此方法只对可见元素有效.大理石平台价格表 参数 coo ...

  6. Leetcode部分题目整理(Javascript)

    3.无重复字符的最长子串 /** * @param {string} s * @return {number} */ var lengthOfLongestSubstring = function(s ...

  7. 【luoguP2158】 [SDOI2008]仪仗队

    题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图 ...

  8. 用javascript来判别回文数

    什么是回文数?通俗的说就是正着读和倒着读都一样的字符串(即使是数字也是可以看成字符串的). 所以下面回文数都是用字符串来表示的,即判断回文数就是对字符串的判断. 举几个回文数的例子: i love u ...

  9. 初次使用自己写的testbench 验证了简单的NOT门。

    先是简单的非门模型: module notgate(a,b); input a; output b; assign b=~a; endmodule 下面是自己写的简陋的testbench: `time ...

  10. Java线程优先级及守护线程(二)

    简述 在操作系统中,线程是可以划分优先级的,优先级较高的线程,得到CPU优先执行的几率就较高一些.设置线程的优先级,有助于帮助线程规划期选择下一个哪一个线程优先执行,但是线程优先级高不代表一定会优先执 ...