python装饰器感觉是个小小的难点(@_@):

                      


 

  

正文:

  1. python装饰器(@)

    先写两个函数来理解下装饰器原理:

def func_1(func):
    print("我是:")
    func()

def func_2():
    print("剑圣")


print("***********我是分割线************")

func_1 = func_1(func_2)

  输出:

     python 装饰器_其他

  来分析一下:

  (1).  有两个函数func_1和func_2

  (2). 接着print运行之后,运行了func_1(func_2),输出了"我是剑圣"。

 

  a. 我们把func_2看作主核心,func_1(func_2)就是在func_2这个核心运行之前,再运行一下func_1的语句。

  b. 也就是,在我们被装饰函数func_2之前运行一下想要运行的代码(我理解为装饰代码)。

  3. 就以上边为例,func_1中的第一个print()就类似于修饰一下func_2的代码。

  因为func_2输出的"剑圣",你不知道这个"剑圣"想要表达啥,python 装饰器_分割线_02

  是想要表达"剑圣怎么样了?","剑圣是谁?",还是"剑圣单身了?",我们不知道。

  所以,这里的func_1就用来装饰,补充表达我们对func_2,"剑圣"的说明,表示”我是剑圣“。

  这便是我的理解。装饰器的工作原理,”对于被装饰函数,我们在他之前或之后输出一些语句,或做出一些功能“。

 


 

  2. (装饰器@)语法表达;

    我们将用于装饰的函数(以上方 func_1为例)之前用@表示,然后写在被装饰函数(func_2)的上方。

  例子:

 

def func_1(func):
  def kezi():
     print("我是:")    func()
  return kezi @func_1
def func_2(): print("剑圣") print("***********我是分割线************") func_2()

 

  输出:

     python 装饰器_其他_03

 

@def func_1
def func_2():
    .......



这里的这串代码其实就等同于上方的 func_2 = func_1(func_2)

 

   


  中间加了个def kezi(),不这么加没有返回值,最后调用的时候,运行不了 = =。总之要给个返回值才可以。

   暂时学习情况是这样,anyway,做个记号,有错再来改。