python装饰器感觉是个小小的难点(@_@):
正文:
1. python装饰器(@)
先写两个函数来理解下装饰器原理:
def func_1(func): print("我是:") func() def func_2(): print("剑圣") print("***********我是分割线************") func_1 = func_1(func_2)
输出:
来分析一下:
(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输出的"剑圣",你不知道这个"剑圣"想要表达啥,
是想要表达"剑圣怎么样了?","剑圣是谁?",还是"剑圣单身了?",我们不知道。
所以,这里的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()
输出:
@def func_1 def func_2(): ....... 这里的这串代码其实就等同于上方的 func_2 = func_1(func_2)
中间加了个def kezi(),不这么加没有返回值,最后调用的时候,运行不了 = =。总之要给个返回值才可以。
暂时学习情况是这样,anyway,做个记号,有错再来改。