Python中的Decorator装饰器的使用示例
作者:漂泊的小森 时间:2023-07-02 10:37:44
#最近在网上看代码时,出现了@???的代码,看了好久也不知道是什么意思,经过了解原来是装饰器,我给大家举个例子讲解一下,帮助大家快速理解:
##大家在写函数的时候,可能会想测试这个函数的运行时间,如果每个函数都加一个类似于:
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
标签:Python,Decorator,装饰器
0
投稿
猜你喜欢
Vue如何引入远程JS文件
2023-07-02 16:34:13
asp中isNull(str), isEmpty(str)和str=""的区别
2008-02-15 13:10:00
MySql如何获取相邻数据
2024-01-16 04:36:53
PHP实现通过二维数组键值获取一维键名操作示例
2023-11-22 12:00:52
python多线程方法详解
2023-10-16 02:46:31
用Python将Excel数据导入到SQL Server的例子
2021-08-21 19:24:30
Go语言中的闭包详解
2023-06-30 05:27:14
动态给表添加删除字段并同时修改它的插入更新存储过程
2011-12-01 10:18:28
Python使用numpy产生正态分布随机数的向量或矩阵操作示例
2022-12-28 05:44:11
Mysql索引选择以及优化详解
2024-01-18 13:56:12
HTML5 Canvas 起步(1) - 基本概念
2009-04-21 13:14:00
asp如何在约定时间显示特定的提示信息?
2010-06-28 16:52:00
python Tornado框架的使用示例
2021-01-03 11:12:11
在.NetCore(C#)中使用ODP.NET Core+Dapper操作Oracle数据库
2024-01-26 05:33:06
python 包实现 urllib 网络请求操作
2023-11-03 07:19:50
Pandas过滤dataframe中包含特定字符串的数据方法
2021-10-11 13:39:08
三分钟时间教你用Python绘制春联
2023-11-06 00:26:08
解读ASP.NET 5 & MVC6系列教程(13):TagHelper
2024-05-03 15:30:35
ASP 常见的连接字符串写法(access2007)
2011-03-25 10:40:00
在django中图片上传的格式校验及大小方法
2023-04-02 23:12:56