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


Posted in Python onApril 21, 2018

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

Python 相关文章推荐
Python 错误和异常小结
Oct 09 Python
Python 时间操作例子和时间格式化参数小结
Apr 24 Python
详解详解Python中writelines()方法的使用
May 25 Python
python压缩文件夹内所有文件为zip文件的方法
Jun 20 Python
尝试使用Python多线程抓取代理服务器IP地址的示例
Nov 09 Python
python实现的自动发送消息功能详解
Aug 15 Python
PyTorch里面的torch.nn.Parameter()详解
Jan 03 Python
python关于变量名的基础知识点
Mar 03 Python
python 生成任意形状的凸包图代码
Apr 16 Python
Python Map 函数的使用
Aug 28 Python
Matplotlib绘制混淆矩阵的实现
May 27 Python
利用Python判断你的密码难度等级
Jun 02 Python
Python实现针对给定字符串寻找最长非重复子串的方法
Apr 21 #Python
Python 实现一行输入多个值的方法
Apr 21 #Python
Python实现接受任意个数参数的函数方法
Apr 21 #Python
深入分析python数据挖掘 Json结构分析
Apr 21 #Python
Python编程中NotImplementedError的使用方法
Apr 21 #Python
python 通过字符串调用对象属性或方法的实例讲解
Apr 21 #Python
python 限制函数调用次数的实例讲解
Apr 21 #Python
You might like
造势之举?韩国总统候选人发布《星际争霸》地图
2017/04/22 星际争霸
php实现按天数、星期、月份查询的搜索框
2016/05/02 PHP
PHP5.5基于mysqli连接MySQL数据库和读取数据操作实例详解
2019/02/16 PHP
JS 获取span标签中的值的代码 支持ie与firefox
2009/08/24 Javascript
html数组字符串拼接的最快方法
2009/09/16 Javascript
JavaScript 基于原型的对象(创建、调用)
2009/10/16 Javascript
jquery 锁定弹出层实现代码
2010/02/23 Javascript
javascript开发技术大全-第3章 js数据类型
2011/07/03 Javascript
jquery如何改变html标签的样式(两种实现方法)
2013/01/16 Javascript
基于jquery实现页面滚动到底自动加载数据的功能
2015/12/19 Javascript
jQuery实现页面点击后退弹出提示框的方法
2016/08/24 Javascript
让html元素随浏览器的大小自适应垂直居中的实现方法
2016/10/12 Javascript
js微信支付实现代码
2016/12/22 Javascript
jQuery插件Echarts实现的渐变色柱状图
2017/03/23 jQuery
vue中本地静态图片路径写法
2018/03/06 Javascript
关于Google发布的JavaScript代码规范你要知道哪些
2018/04/04 Javascript
Vue2.0 实现移动端图片上传功能
2018/05/30 Javascript
详解从react转职到vue开发的项目准备
2019/01/14 Javascript
Vue实现腾讯云点播视频上传功能的实现代码
2020/08/17 Javascript
[09:22]2014DOTA2西雅图国际邀请赛 主赛事第二日TOPPLAY
2014/07/21 DOTA
[01:32]DOTA2次级联赛——首支职业女子战队选拔赛全记录
2014/10/23 DOTA
[06:24]DOTA2 2015国际邀请赛中国区预选赛第二日TOP10
2015/05/27 DOTA
[02:10]DOTA2 TI10勇士令状玩法及不朽Ⅰ展示:焕新世界,如你所期
2020/05/29 DOTA
python正则表达式判断字符串是否是全部小写示例
2013/12/25 Python
Python使用itertools模块实现排列组合功能示例
2018/07/02 Python
Python从函数参数类型引出元组实例分析
2019/05/28 Python
python进阶之自定义可迭代的类
2019/08/20 Python
Django中提示消息messages的设置方式
2019/11/15 Python
Python 改变数组类型为uint8的实现
2020/04/09 Python
英国高级健康和美容产品零售商:Life and Looks
2019/08/01 全球购物
实习生岗位职责
2014/04/12 职场文书
我的梦想演讲稿
2014/04/30 职场文书
毕业生评语大全
2015/01/04 职场文书
课程设计感想范文
2015/08/11 职场文书
Golang 如何实现函数的任意类型传参
2021/04/29 Golang
js 数组 fill() 填充方法
2021/11/02 Javascript