python 找到装饰器_Python之装饰器

装饰器本质上就是一个python函数,他可以让其他函数在不需要做任何代码变动的前提下,增加额外的功能,装饰器的返回值也是一个函数对象。

装饰器的作用:在不改变原函数及原函数的执行的情况下,为原函数增加一些额外的功能,比如打印日志、执行时间,登录认证等等。

测试函数的执行时间:

一个简单的装饰器:

import time

def func1():

print('晚上回家吃饭!')

time.sleep(1)

def func2():

print("晚上不回家吃饭!")

time.sleep(1)

def timer(f1):

star_time = time.time()

f1()

end_time = time.time()

print('耗时:%s'%(end_time-star_time))

f = func1

func1 = timer

func1(f)

import time

def func1():

print('晚上回家吃饭!')

time.sleep(1)

def func2():

print("晚上不回家吃饭!")

time.sleep(1)

def timer(f1): # f1 = func1

def inner():

star_time = time.time()

f1()

end_time = time.time()

print('耗时:%s'%(end_time-star_time))

return inner

func1 = timer(func1) #实际返回inner

func1() #相当于执行inner()

但是如果有多个函数,我都想让你测试他们的执行时间,你每次是不是都得func1 = timer(func1)?这样还是有点麻烦,

因为这些函数的函数名可能是不相同,有func1,func2,graph,等等,所以更简单的方法,python给你提供了,那就是语法糖。

import time

def timer(f1):

def inner():

star_time = time.time()

f1()

end_time = time.time()

print('耗时:%s'%(end_time-star_time))

return inner

@timer #相当于 func1 = timer(func1) 返回inner

def func1():

print('晚上回家吃饭!')

time.sleep(1)

func1()

带参数的装饰器:

import time

def timer(f1): #f1 = func1

def inner(*args,**kwargs):

star_time = time.time()

f1(*args,**kwargs)

end_time = time.time()

print('耗时:%s'%(end_time-star_time))

return inner

@timer #相当于 func1 = timer(func1) 返回inner

def func1(a,b):

print(a,b)

print('晚上回家吃das 饭!')

time.sleep(1)

func1(11,22) #相当于执行inner(11,22)

带返回值的装饰器

import time

def timer(f1):

def inner(*args,**kwargs):

star_time = time.time()

'''上面的代码是执行函数之前的操作'''

ret = f1(*args,**kwargs)

'''下面的部分是执行函数之后的操作'''

end_time = time.time()

print('耗时:%s'%(end_time-star_time))

return ret

return inner

@timer #相当于 func1 = timer(func1) 返回inner

def func1(a,b):

print(a,b)

print('晚上回家吃das 饭!')

time.sleep(1)

return 666

print(func1(11,22)) #相当于执行inner(11,22)

执行结果

11 22

晚上回家吃das 饭!

耗时:1.0000572204589844

666

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值