人类的本质只是复读机

原来学习 装饰器 的时候,看别人长篇大论讲的,各种高大上的词汇一个接一个,但等别人讲完之后,依然一脸懵逼,理解不能。

鉴于如此,这里从简单的角度 总结一下自己对于 简单装饰器的认识:

1. 装饰器 的本质

# 装饰器的本质,实际上就是一个简单的赋值操作,类似于:
>>> a=a+1

你没看错,就是这样, 连人类这种动物本质都只是复读机,装饰器凭什么高大上?

2.  一切都归结于 python 的变量很自由

下面看两段代码:

代码1:

>>> def f(x):
    b=x+1
    return(b)
>>> a=1
>>> a=f(a) #  相当于 a=b
>>> a
2

代码2:

>>> def f(x):
    def b():
        x()
        print("第二次print")
    return(b)
>>> def a():
    print("第一次print")
>>> a=f(a) # 相当于 把函数b 赋值给 a
>>> a() 
第一次print
第二次print

对比下两段代码,会发现两段代码差不多,只是第一段中的a,b 是整数,第二段中把a,b 改了函数而已

3. 想办法把代码写的逼格高一点

然后我们把第二段代码改改,改成下面这样:

代码3:

>>> def f(x):
    def b():
        x()
        print("第二次print")
    return(b)

>>> @f
def a():
    print("第一次print")
>>> a()
第一次print
第二次print

4. 只是一个赋值操作

上面的第三段,其实就是把 a=f(a)改了改,改成了 @f 这种形式,这样一个简陋的装饰器就出来了

现在回到前面,看看  a=a+1 和 a = f(a) 本质差别很大吗?都只是 赋值操作

5. 不要被文字误导了

理解装饰器,不能被文字误导了,不能从 “装饰” 这个角度理解,它的本质,就是一个简单的赋值操作而已,原本 a() 这个函数,被另一个新的函数 替换了,只是这个新的函数还顶着  "a" 这个名字

一些复杂的装饰器,也只是在赋值的过程中 加了一点别的花样了而已,把 a=f(a) 写成了  a=f1(f2(f3(a)))

或者给 f1,f2,f3 这些函数加入一些参数x,y,z,成了:

a=f1(f2(f3(a,z),y),x)

猜你喜欢

转载自www.cnblogs.com/blueskybulesky/p/9459822.html