使用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. jQuery.trim()方法

    定义和用法 $.trim() 函数用于去除字符串两端的空白字符. 注意:$.trim()函数会移除字符串开始和末尾处的所有换行符,空格(包括连续的空格)和制表符.如果这些空白字符在字符串中间时,它们将 ...

  2. 使用html2canvas在手机端独立实现h5页面转图片

    需求 方便用户把每日消息的海报图片分享到微信朋友圈进行消息扩散 实现方案 使用html2canvas 插件,html2canvas 1.0.0-alpha.11 ,github地址:https://g ...

  3. windows下多个python版本共存 及安装Django

    了解python的人都知道python有2.x版本和3.x版本,而python3.x版本不向下兼容,但是根据具体的需要,有时候要2.x和3.x共存,python共存本身没有问题,只是需要设置一些环境变 ...

  4. onpageshow、onpagehide、onload、onunload

    onpageshow :在用户浏览网页时触发, 在页面从浏览器缓存中读取时也触发 通过event.persisted 来判断, 如果页面从浏览器的缓存中读取该属性返回 ture,否则返回 false ...

  5. cubemx+stm32串口学习汇总资料

    这篇文章是串口中断的文章--STM32基于CubeMX的高速串口收发程序(中断模式)比较有帮助. http://www.stmcu.org.cn/module/forum/thread-616613- ...

  6. CodeForces 839D - Winter is here | Codeforces Round #428 (Div. 2)

    赛后听 Forever97 讲的思路,强的一匹- - /* CodeForces 839D - Winter is here [ 数论,容斥 ] | Codeforces Round #428 (Di ...

  7. ubunut:子进程 post-installation script 返回了错误号 1

    解决dpkg/apt-get error : 子进程 post-installation script 返回了错误号 1 这个不太好解决,感觉这个比较好,未测试 https://blog.csdn.n ...

  8. .net上传大文件的解决方案

    ASP.NET上传文件用FileUpLoad就可以,但是对文件夹的操作却不能用FileUpLoad来实现. 下面这个示例便是使用ASP.NET来实现上传文件夹并对文件夹进行压缩以及解压. ASP.NE ...

  9. BZOJ 4712 洪水 动态dp(LCT+矩阵乘法)

    把之前写的版本改了一下,这个版本的更好理解一些. 特地在一个链的最底端特判了一下. code: #include <bits/stdc++.h> #define N 200005 #def ...

  10. [Vue] : Vue实例的声明周期

    vue实例的生命周期 什么是生命周期:从Vue实例创建.运行.到销毁期间,总是伴随着各种各样的事件,这些事件,统称为生命周期! 生命周期钩子:就是生命周期事件的别名而已: 生命周期钩子 = 生命周期函 ...