python装饰器
装饰器,人如其名,就是给成添加附功能的手段,但是该代码已经上线或已经被使用,那么就不能大批量的修改源代码,这样是不科学的也是不现实的,因为就产生了装饰器,使得其满足下面两点:
- 不能修改被装饰的函数的源代码
- 不能改变被装饰函数的调用方式
- 满足以上两点的基础上,给函数赋予新的功能。
以上就是我们使用装饰器的意义所在。
理解装饰器之前,然我们来看一下装饰器的组成,这里用一个表达式来体现一下。
函数+实参高阶函数+返回值高阶函数+嵌套函数+语法糖 = 装饰器
这里写一个简单的装饰器举例说明一下:
improt time
def timer(func)
def deco(*args, **kwargs):
start = time.time()
res = func(*args, **kwargs)
stop = time.time()
print(stop-start)
return res
return deco
@timer
def test(parameter): #8
time.sleep(2)
print("test is running!")
return "Returned value"
test()
这个装饰器针对的是带参数带返回值的函数的装饰器,如果函数带参数,那么内部函数deco函数和func函数也必须对应的加上参数,如果被修饰函数带有返回值就需要将(res)在内部函数中返回,这样才能在调用装饰器时体现出来。
另外,这里有一点就是func和func()的区别,func就是指函数的内存地址,而func()是指内存中的内容,也就是函数的内容。
这里推荐一个关于装饰器的文章写的还不错,如果感觉自己理解的不是很清楚,可以看一下这位大佬的文章https://blog.csdn.net/xinlinliu/article/details/102997301,好的事物拿来分享大家一起进步!
还没有评论,来说两句吧...