Python中的Decorator装饰器的使用示例
作者:漂泊的小森 发布时间:2023-07-02 10:37:44
标签:Python,Decorator,装饰器
#最近在网上看代码时,出现了@???的代码,看了好久也不知道是什么意思,经过了解原来是装饰器,我给大家举个例子讲解一下,帮助大家快速理解:
##大家在写函数的时候,可能会想测试这个函数的运行时间,如果每个函数都加一个类似于:
start=time.time()
函数主体
over=time.time()
Time=over-start
print(Time)
def haha():
start=time.time()
for i in range(1200):
if i%2==0:
print('这是个偶数:',i)
over=time.time()
print("总共花费的时间:",over-start)
haha()
这样函数的可读性也不高,如果要测试好几个函数还会大量浪费时间。
下面引入装饰器:
1简单的装饰器操作:
(先定义一个函数1(里面传递一个参数),然后在函数1里面再定义一个函数2负责计算时间,并在时间中间调用定义函数1的参数,然后返回这个函数2):
!!!当我们想调用装饰器时,只需@函数1的名字,放在想要使用的函数前面即可。
import time
def decorator(fun):
def wrapper():
t1=time.time()
fun()
t2=time.time()
print('总共花费的时间:',t2-t1)
return wrapper
@decorator
def haha():
#start=time.time()
for i in range(1200):
if i%2==0:
print('这是个偶数:',i)
#over=time.time()
#print("总共花费的时间:",over-start)
haha()
2,装饰器升级版(如果我们想套用的函数中,具有返回对应的值这个功能共时使用):
例如这个函数:
def haha():
a=0
#start=time.time()
for i in range(1200):
if i%2==0:
print('这是个偶数:',i)
a=a+i
return a
#我们如果还用1中的装饰器就不能返回对应的值,这就需要改动装饰器:
(在装饰器中也要把函数中定义参数的返回值给表示出来,并且利用return 给返回值,输出出来)
import time
def decorator1(fun):
def wrapper2():
t1=time.time()
result=fun()
t2=time.time()
print('总共花费的时间:',t2-t1)
return result
return wrapper2
@decorator1
def haha():
a=0
#start=time.time()
for i in range(1200):
if i%2==0:
print('这是个偶数:',i)
a=a+i
return a
#over=time.time()
#print("总共花费的时间:",over-start)
aaa=haha()
print(aaa)
可能有同学会问,为什么后面要用到aaa=haha(),
这是因为我们要接受返回值result,并将其用print()打印出来。
3,装饰器的升级升级版(当我们需要使用的函数haha中,不但有返回值,还有传入的参数时使用。)
(只需要在我们的函数2和调用的函数1中的参数()里面加上关键字传参*args,即可)
import time
def decorator1(fun):
def wrapper2(*args):
t1=time.time()
result=fun(*args)
t2=time.time()
print('总共花费的时间:',t2-t1)
return result
return wrapper2
@decorator1
def haha(key):
a=0
#start=time.time()
for i in range(key):
if i%2==0:
print('这是个偶数:',i)
a=a+i
return a
#over=time.time()
#print("总共花费的时间:",over-start)
aaa=haha(1200)
print(aaa)
可不要忘了,调用函数haha时要传入参数哦。
来源:https://blog.csdn.net/Superman980527/article/details/127593379
0
投稿
猜你喜欢
- 完全备份的SH文件:exp_comp.shrq=` date +"%m%d" `su - oracle -c "
- 搞了一上午,头都大了!最终解决问题。其实这问题老早就遇上了,但是比较懒,三下两下没整好便推开了搜索了一下,产生< msxml3.dll
- 递归是以相似的方式重复项目的过程。同样适用于编程语言中,如果一个程序可以让你调用同一个函数被调用的函数,递归调用函数内使用如下。func r
- 话不多说,直接上代码import copyimport cv2import numpy as npWIN_NAME = 'draw_
- 这回我们看看如何实现判断两个对像的内容是否相等。这里有一个克隆结果原则是针对Java语言的,当然JavaScript也可以胜任。克隆满足的条
- 代码如下:---找出促销活动中销售额最高的职员 ---你刚在一家服装销售公司中找到了一份工作,此时经理要求你根据数据库中的两张表
- 提叻一个代码段,要人帮助解释一下。代码如下:declare type t_indexby is ta
- 在计算机信息技术中,少有象类似 XML 那样的技术,她让人们产生范围很大的联想,而这些联想及其应用又可能相距甚远。她也更多引起人们对 XML
- 本文实例讲述了Centos7.4环境安装lamp-php7.0的方法。分享给大家供大家参考,具体如下:一. 环境准备桥接模式能访问外网#pi
- 大家都知道JAVA里最流行的是MVC模型的编程方式,如果你不知道MVC的概念,可以去网上搜索下,应该会马上找到N多资料。PHP5推出之后,也
- 1.安装Apachea) 双击文件Apach_2.2.8_win32-x86-no_ssl.msi,弹出欢迎界面。单NEXT按钮,进入到Li
- 前言文章抄袭在互联网中普遍存在,很多博主都收受其烦。近几年随着互联网的发展,抄袭等不道德行为在互联网上愈演愈烈,甚至复制、黏贴后发布标原创屡
- 按数量级递增排列,常见的时间复杂度有:常数阶O(1),对数阶O(log2n),线性阶O(n),线性对数阶O(nlog2n),平方阶O(n2)
- 本文实例讲述了Python使用reportlab将目录下所有的文本文件打印成pdf的方法。分享给大家供大家参考。具体实现方法如下:# -*-
- 利用ACCESS可以用查询创建视图这一功能来进行查询分析。选择查询->在设计视图中创建查询,然后关闭弹出的表选择对话框,在下面的窗口上
- 下面给出ORACLE的一种实现方式,要分2步走:1. 建立 SEQUENCE CREATE [ OR REPLACE ] SEQUENCE
- 本文实例分析了php字符串截取函数用法。分享给大家供大家参考。具体分析如下:php自带的截取字符串的函数只能处理英文,数字的不能截取中文混排
- 本节讲述单选框/下拉菜单/添加文件,综合css,html和JavaScript实现的,具体详情如下所示:单选框:实现的功能是:(类似平时的性
- 导言到目前为止的讨论编辑DataList的教程里,没有包含任何验证用户的输入,即使是用户非法输入— 遗漏了product的name或者负的p
- Silverlight也算一个比较开放的技术。Button控件其实也是一些标准的Grid、Canvas、Rectangle、TextBloc