使用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 相关文章推荐
pygame学习笔记(1):矩形、圆型画图实例
Apr 15 Python
Python中类型关系和继承关系实例详解
May 25 Python
Python中线程编程之threading模块的使用详解
Jun 23 Python
深入理解python多进程编程
Jun 12 Python
pandas数据框,统计某列数据对应的个数方法
Apr 11 Python
Python打包方法Pyinstaller的使用
Oct 09 Python
Python操作excel的方法总结(xlrd、xlwt、openpyxl)
Sep 02 Python
详解python内置常用高阶函数(列出了5个常用的)
Feb 21 Python
Python try except异常捕获机制原理解析
Apr 18 Python
Python如何读写二进制数组数据
Aug 01 Python
Django多数据库联用实现方法解析
Nov 12 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
Dec 10 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中如何使对象可以像数组一样进行foreach循环
2013/08/09 PHP
php中url函数介绍及使用示例
2014/02/13 PHP
php使用post数组的键值创建同名变量并赋值的方法
2015/04/03 PHP
php删除数组指定元素实现代码
2017/05/03 PHP
laravel 解决groupBy时出现的错误 isn't in Group By问题
2019/10/17 PHP
jquery checkbox,radio是否选中的判断代码
2010/03/20 Javascript
javascript 类型判断代码分析
2010/03/28 Javascript
Javascript 去除数组的重复元素
2010/05/04 Javascript
原生js的弹出层且其内的窗口居中
2014/05/14 Javascript
jQuery控制TR显示隐藏的三种常用方法
2014/08/21 Javascript
node.js中的console.timeEnd方法使用说明
2014/12/09 Javascript
jQuery实现分章节锚点“回到顶部”动画特效代码
2015/10/23 Javascript
Vue.JS入门教程之自定义指令
2016/12/08 Javascript
js 递归和定时器的实例解析
2017/02/03 Javascript
JavaScrip数组删除特定元素的几种方法总结
2017/09/06 Javascript
浅谈vue引入css,less遇到的坑和解决方法
2018/01/20 Javascript
使用JavaScript生成罗马字符的实例代码
2018/06/08 Javascript
前端防止用户重复提交js实现代码示例
2018/09/07 Javascript
nodejs基础之常用工具模块util用法分析
2018/12/26 NodeJs
解决vue项目本地启动时无法携带cookie的问题
2021/02/06 Vue.js
Python生成随机密码
2015/03/10 Python
python中self原理实例分析
2015/04/30 Python
python被修饰的函数消失问题解决(基于wraps函数)
2019/11/04 Python
马来西亚领先的在线礼品店:Giftr
2018/08/23 全球购物
乌克兰电子产品和家用电器购物网站:TOUCH
2019/08/09 全球购物
银行出纳岗位职责
2013/11/25 职场文书
优秀毕业生自荐信范文
2014/01/01 职场文书
一份报关员的职业规划范文
2014/01/08 职场文书
招聘与培训专员岗位职责
2014/01/30 职场文书
幼儿园六一儿童节主持节目串词
2014/03/21 职场文书
美化环境标语
2014/06/20 职场文书
党的群众路线教育实践活动对照检查材料思想汇报
2014/09/19 职场文书
对公司的意见和建议
2015/06/04 职场文书
小学四年级作文之写景
2019/08/23 职场文书
Win11 Build 21996.1 Dev版怎么样? win11系统截图欣赏
2021/11/21 数码科技
使用Apache Camel表达REST服务的方法
2022/06/10 Servers