python装饰器常见使用方法分析
作者:轻舞肥羊 发布时间:2023-06-23 21:18:33
标签:python,装饰器
本文实例讲述了python装饰器常见使用方法。分享给大家供大家参考,具体如下:
python 的装饰器,可以用来实现,类似spring AOP 类似的功能。一样可以用来记录某个方法执行前做什么,执行后做什么,或者用来记录日志,运行的时间等,更有甚者,用这个来做权限拦截,也未尝不可。从两个方面来描述python 的装饰模式:
1. 对普通方法的装饰
2. 对在 class 类中的方法的装饰,不需要给参数的情况
3. 对在 class 类中的方法的装饰,需要给参数的情况
一,对普通方法的装饰。比如,要计算一个一个方法执行的时间.
#coding:utf-8
import time
def timeit(func):
def wrapper(*args, **kv):
start = time.clock()
print '开始执行'
func(*args, **kv)
end =time.clock()
print '花费时间:', end - start
return wrapper
@timeit
def foo():
print 'in foo()'
if __name__=='__main__':
foo()
运行结果:
开始执行
in foo()
花费时间: 6.55415628267e-05
可以看到,计算出了时间差。而不是像普通方法一样,写在一个函数里面实现。
二、对在 class 类中的方法的装饰,不需要给参数的情况
#coding:utf-8
import time
def timeit(func):
def wrapper(*args, **kv):
start = time.clock()
print '开始执行'
func(*args, **kv)
end =time.clock()
print '花费时间:', end - start
return wrapper
class MySpendTime(object):
def __init__(self):
pass
@timeit
def foo(self):
print 'in foo()'
spendtime=MySpendTime()
spendtime.foo()
运行结果:
开始执行
in foo()
花费时间: 4.42208134735e-05
三、对在 class 类中的方法的装饰,需要给参数的情况
#coding:utf-8
'''
Created on 2012-11-1
@author: yihaomen.com
'''
def UpdateUI(msg, step):
print u"内容:", msg
print u"步骤:到第%s步了" % step
def dec(func):
def wapper(self, *args, **kwargs):
func(self,*args, **kwargs)
return wapper
return dec
class Command(object):
def Excute(self):
self.Work1st()
self.Work2nd()
self.Work3rd()
@UpdateUI("开始第一步","1")
def Work1st(self):
print "Work1st"
@UpdateUI("开始第二步", 2)
def Work2nd(self):
print "Work2nd"
@UpdateUI("开始第三步", 3)
def Work3rd(self):
print "Work3rd"
if __name__=="__main__":
command = Command()
command.Excute()
运行结果:
内容: 开始第一步
步骤:到第1步了
内容: 开始第二步
步骤:到第2步了
内容: 开始第三步
步骤:到第3步了
Work1st
Work2nd
Work3rd
希望本文所述对大家Python程序设计有所帮助。
来源:104.116.116.112.58.47.47.119.119.119.46.121.105.104.97.111.109.101.110.46.99.111.109.47.97.114.116.105.99.108.101.47.112.121.116.104.111.110.47.50.56.56.46.104.116.109.


猜你喜欢
- 本文实例讲述了Python中defaultdict与lambda表达式用法。分享给大家供大家参考,具体如下:从教程中看到defaultdic
- osc的rss不是全文输出的,不开心,所以就有了python抓取osc最新博客生成Rss# -*- coding: utf-8 -*-fro
- 人生苦短,菜鸟学Python!今天,我们会一次性分享6个堪称神仙的内置函数。在很多计算机书籍中,它们也通常作为高阶函数来介绍。而我自己在日常
- //-------------------------------------------- // 删除千分点。 //-----------
- 前言装饰器(decorator)在Python框架中扮演着重要角色,是Python中实现切面编程(AOP)的重要手段。aspect-orie
- 在while和for循环过程中,为了更加灵活地控制循环的次数,python提供了break和continue循环控制语句。1. break
- MVC设计模式MVC (Model-View-Controller) 是软件工程中常用的软件架构模式,它是一种分离业务逻辑与显示界面的设计方
- import osdef load() : filename = os.getcwd() + r'
- 1、概述Golang是一种强类型语言,虽然在代码中经常看到i:=12这种写法,这其实是编译器在编译期间自动做了类型推断。编译器会对数据进行类
- 当我们的文章表中没有对于文章的评论数字段时,我们该这么写sql语句来显示出评论最多的文章呢?下面本站给大家收集了几种方法,仅供参考:1.se
- 本文实例讲述了Python实现破解12306图片验证码的方法。分享给大家供大家参考,具体如下:不知从何时起,12306的登录验证码竟然变成了
- 因项目需要,需要使用C#控制台程序执行python脚本,查询各种资料后可以成功调用了,记录一下,以备后面遗忘。只尝试了两种调用方式,第一种只
- 本文主要介绍了用OpenCV进行年龄和性别检测的实现示例,分享给大家,具体如下:在本文中,我将带您完成用 Python 进行机器学习的年龄和
- 深入解析Linux下MySQL数据库的备份与还原 1. 备份 [root@localhost ~]# cd /var/lib/mysql (
- 1.雷达图程序示例'''1.空白极坐标图'''import matplotlib.pyplo
- 报错信息:Store update, insert, or delete statement affected an unexpected
- 一、DBMS_REDEFINITION(在线重定义)参考MOS文档:_How To Partition Existing Table Usi
- 本文实例讲述了Python3.5常见内置方法参数用法。分享给大家供大家参考,具体如下:Python的内置方法参数详解网站为:https://
- 前言最近实习任务为黑烟检测,想起了可以尝试用yolov5来跑下,之前一直都是用的RCNN系列,这次就试试yolo系列。一、安装pytorch
- 前言本文主要给大家介绍的关于Python批量压缩png的相关资料,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:1.需求为什