作为小白,在学python装饰器时,真的是很抓狂,看了几遍廖雪峰老师的教程后还是不理解,先后也找了几篇有关python装饰器的博客来看,才可以勉强理解装饰器的含义
python装饰器其实就是python中的一个语法,不用它也同样可以实现你想要的功能,只是相较而言需要更多的代码,使用装饰器来说会简洁而方便一些
简单了解python装饰器可以分几步
第一步:了解简单的函数性质
函数也是对象,python函数具有对象的所有性质
(1)它有id,有type,有值。
(2)可以赋值可以给变量
def MyPython(): return 'I Love Python' MyPython1=MyPython
注意:把函数赋值给变量时候,是把函数名赋值给变量,不要写成
MyPython1=MyPython()
这是错误的,MyPython()是执行了函数,把函数的返回值赋给了变量MyPython1
(3)可当参数传递,也可以当返回值
因为是具有变量的性质,所以变量可以干啥它就可以干啥
def MyPython(MyChildren): return MyChilren def MyPython1(): print(“I Love Python”) f=MyPython(MyPython1) f()
在这几个函数中,MyPython1是MyPython的参数,MyChilren是函数MyPython的返回值
第二步:装饰器的功能
@My def My1(): return 'hello world'
看到@My你可能一头雾水,但经过第一步的函数一些接受,对于下面这一段函数你应该可以理解了
def My1(): return 'hello world' My= My1(My)
其实上下这两段代码是等价的
My1是个函数,参数得是函数对象,返回值是函数对象。@的语法其实是省去了上面最后一行代码,
用了装饰器后,每次调用My时,真正调用的是My1()返回的函数对象。