使用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变量作用范围实例分析
Jul 07 Python
浅析Python中else语句块的使用技巧
Jun 16 Python
Python调用C# Com dll组件实战教程
Oct 12 Python
python基于twisted框架编写简单聊天室
Jan 02 Python
Python常见内置高效率函数用法示例
Jul 31 Python
python实现贪吃蛇小游戏
Mar 21 Python
快速查找Python安装路径方法
Feb 06 Python
在python3中实现查找数组中最接近与某值的元素操作
Feb 29 Python
Python如何在循环内使用list.remove()
Jun 01 Python
Python try except finally资源回收的实现
Jan 25 Python
Python批量将csv文件转化成xml文件的实例
May 10 Python
使用pandas或numpy处理数据中的空值(np.isnan()/pd.isnull())
May 14 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
在线竞拍系统的PHP实现框架(二)
2006/10/09 PHP
新手配置 PHP 调试环境(IIS+PHP+MYSQL)
2007/01/10 PHP
解析PHP对现有搜索引擎的调用
2013/06/25 PHP
PHP中foreach()用法汇总
2015/07/02 PHP
js资料prototype 属性
2007/03/13 Javascript
推荐一些非常不错的javascript学习资源站点
2007/08/29 Javascript
详解JavaScript语法对{}处理的坑爹之处
2014/06/05 Javascript
javascript实现修改微信分享的标题内容等
2014/12/11 Javascript
javascript实现控制的多级下拉菜单
2015/07/05 Javascript
学习JavaScript设计模式(封装)
2015/11/26 Javascript
JavaScript知识点总结(六)之JavaScript判断变量数据类型
2016/05/31 Javascript
微信页面倒计时代码(解决safari不兼容date的问题)
2016/12/13 Javascript
Vue.js系列之项目搭建(1)
2017/01/03 Javascript
微信小程序注册60s倒计时功能 使用JS实现注册60s倒计时功能
2017/08/16 Javascript
bootstrap时间控件daterangepicker使用方法及各种小bug修复
2017/10/25 Javascript
基于jQuery中ajax的相关方法汇总(必看篇)
2017/11/08 jQuery
Vue2.0 事件的广播与接收(观察者模式)
2018/03/14 Javascript
详解vue挂载到dom上会发生什么
2019/01/20 Javascript
微信小程序批量监听输入框对按钮样式进行控制的实现代码
2019/10/12 Javascript
微信小程序保存图片到相册权限设置
2020/04/09 Javascript
Python求解平方根的方法
2015/03/11 Python
python 将大文件切分为多个小文件的实例
2019/01/14 Python
python实现感知器算法(批处理)
2019/01/18 Python
Python使用itchat模块实现简单的微信控制电脑功能示例
2019/08/26 Python
Python 基于jwt实现认证机制流程解析
2020/06/22 Python
毕业生求职简历的自我评价
2013/10/23 职场文书
计算机应用专业毕业生求职信
2013/10/24 职场文书
暑期社会实践感言
2014/02/25 职场文书
主题教育活动总结
2014/05/05 职场文书
垃圾桶标语
2014/06/24 职场文书
2014年个人教学工作总结
2014/12/09 职场文书
三方协议书
2015/01/27 职场文书
新教师教学工作总结
2015/08/14 职场文书
读《茶花女》有感:山茶花的盛开与凋零
2020/01/17 职场文书
Django与数据库交互的实现
2021/06/03 Python
Java中的Kotlin 内部类原理
2022/06/16 Java/Android