张一驰

本人计算机专业大二生,平时会自学一些语言,分享在自学过程遇到的一些问题

导航

python装饰器理解

Posted on 2019-05-21 22:26  张一驰  阅读(144)  评论(0)    收藏  举报

作为小白,在学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()返回的函数对象。