装饰器在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().unescape(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装饰器计算函数运行时间的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。