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


猜你喜欢
- 在CSS样式中,dl部分只是简单的把内外边距设置为0,dd部分有一个clear属性需要特别注意。当某个元素的属性设置float浮动时,它所在
- 一、os模块os.getcwd() 获取当前的工作目录os.chdir(‘绝对路径/相对于当前工作目录的路径&r
- 又忙忙碌碌的的过了一个月,但都在瞎忙,忙得没有一点效率也没有一点价值。忙完之后静下来我就在想,这种情况要持续到什么时候是个头啊~~~网站是一
- 前言读取站点资料数据对站点数据进行插值,插值到规则网格上绘制EOF第一模态和第二模态的空间分布图绘制PC序列关于插值,这里主要提供了两个插值
- 本文实例讲述了Python实现获取nginx服务器ip及流量统计信息功能。分享给大家供大家参考,具体如下:#!/usr/bin/python
- 代码片段一:alert(Function instanceof Object); // truealert(Object instanceo
- 下载地址:https://www.percona.com/downloads/XtraBackup/安装xtrabackup[root@no
- django中有自带的分页模块Paginator,想Paginator提供对象的列表,就可以提供每一页上对象的方法。这里的话不讲解Pagin
- 一、hashlib模块什么是哈希模块:hashlib模块是一种加密模块,内部存有多种加密类型加密的作用:可将明文数据进行加密,转换成一串密文
- 基于 Snapchat 的增强现实胡子挂件融合第一个项目中,我们将在检测到的脸上覆盖了一个小胡子。我们可以使用从摄像头捕获的连续视频帧,也可
- 如果一些应用需要到中文字体(如果pygraphviz,不安装中文字体,中文会显示乱码),就要在image 中安装中文字体。默认 python
- 利用Python写了一个小脚本想要传给使用Windows但没有装Python的朋友执行,这时候就可以利用将档案包装成exe档案,让没有Pyt
- 新浪天气预报代码,需要的朋友可以复制下面的代码到要显示的页面,新浪代码 :<IFRAME WIDTH='260
- 一、excel进入密码加密算法cipher Algorithm=“AES”AES加密算法的详细介绍与
- 在写vue代码的时候遇到了一修改.vue文件中export default下脚本的时候总是报一堆莫名其妙的错误的问题:出错原因:在构建项目的
- 本文实例讲述了symfony2.4的twig中date用法。分享给大家供大家参考,具体如下:获得当前时间:{{ "now"
- php统计数组元素个数count():对数组中的元素个数进行统计;sizeof():和count()具有同样的用途,这两个函数都可以返回数组
- 最常用的数值类型是int,但是它未必是最佳选择。bigint,smallint,tinyint可以应用在特殊场合。他们的特性如下表所示:Da
- 本例以Linux上安装Pyhton3.8版本为例进行说明1、依赖包安装yum -y install zlib-devel bzip2-dev
- MAC上的PyCharm中默认的python解释器是python2的,windows下的没用过不是很清楚,所以特来记录下设置python3解