python装饰器

清疚 2022-04-16 05:19 394阅读 0赞

装饰器,人如其名,就是给成添加附功能的手段,但是该代码已经上线或已经被使用,那么就不能大批量的修改源代码,这样是不科学的也是不现实的,因为就产生了装饰器,使得其满足下面两点:

  1. 不能修改被装饰的函数的源代码
  2. 不能改变被装饰函数的调用方式
  3. 满足以上两点的基础上,给函数赋予新的功能。

以上就是我们使用装饰器的意义所在。

理解装饰器之前,然我们来看一下装饰器的组成,这里用一个表达式来体现一下。

函数+实参高阶函数+返回值高阶函数+嵌套函数+语法糖 = 装饰器

这里写一个简单的装饰器举例说明一下:

  1. improt time
  2. def timer(func)
  3. def deco(*args, **kwargs):
  4. start = time.time()
  5. res = func(*args, **kwargs)
  6. stop = time.time()
  7. print(stop-start)
  8. return res
  9. return deco
  10. @timer
  11. def test(parameter): #8
  12. time.sleep(2)
  13. print("test is running!")
  14. return "Returned value"
  15. test()

这个装饰器针对的是带参数带返回值的函数的装饰器,如果函数带参数,那么内部函数deco函数和func函数也必须对应的加上参数,如果被修饰函数带有返回值就需要将(res)在内部函数中返回,这样才能在调用装饰器时体现出来。

另外,这里有一点就是func和func()的区别,func就是指函数的内存地址,而func()是指内存中的内容,也就是函数的内容。

这里推荐一个关于装饰器的文章写的还不错,如果感觉自己理解的不是很清楚,可以看一下这位大佬的文章https://blog.csdn.net/xinlinliu/article/details/102997301,好的事物拿来分享大家一起进步!

发表评论

表情:
评论列表 (有 0 条评论,394人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Python装饰

    装饰器 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。它经常用于有切面需求的场景,比如:

    相关 [Python]装饰

    > Python中利用@符号可以很容易实现函数装饰器的功能,本文就这些用法做一些简单的总结。 介绍 Python中由于函数本身也可以当作变量来使用,因此可以直接将函数作

    相关 python装饰

    装饰器,人如其名,就是给成添加附功能的手段,但是该代码已经上线或已经被使用,那么就不能大批量的修改源代码,这样是不科学的也是不现实的,因为就产生了装饰器,使得其满足下面两点:

    相关 python装饰

    1. 闭包函数   在看装饰器之前,我们先来搞清楚什么是闭包函数。python是一种面向对象的编程语言,在python中一切皆对象,这样就使得变量所拥有的属性,函数也同样拥

    相关 python装饰

    Python2.4开始提供装饰器(decorator),适当使用装饰器可以有效提高代码可读性和可维护性。装饰器的本质就是一个函数,这个函数接受其他函数作为参数,并将其以一个新的

    相关 python 装饰

    装饰器介绍 装饰器(decorator)是一种高级Python语法。装饰器可以对一个函数、方法或者类进行加工。在Python中,我们有多种方法对函数和类进行加工,比如在P