网络编程
位置:首页>> 网络编程>> Python编程>> Python中的Decorator装饰器的使用示例

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
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com