python装饰器‘@’的原理

@fun 其实就是 f = fun(f)

def w1(a):
    print('--我是w1--')
    def w2():
        print('---验证---')
        a()
    return w2      #重点:返回的是w2,w2只是指向的地址而已

def f1():
    print('--我是f1--')

f1 = w1(f1)    #等号左面的f1是w1的return的地址也就是说f1指向了w2,而w2是一个函数。
f1()

#f1()会执行上一行等号右面的东西也就是w2(),这个w2()是先打印验证然后执行a(),而a是w1函数传入的参数也就打印了‘我是f1’这个代码
#执行结果是:

--我是w1--
---验证---
--我是f1--

 

def w1(a):
    print('--我是w1--')
    def w2():
        print('---验证---')
        a()
    return w2
@w1
def f1():
    print('--我是f1--')

f1()    #执行结果和上面是一样的:

--w1--
---验证---
--我是f1--

装饰器有什么作用呢在不动原函数的情况下,对原函数扩展。

 

你可能感兴趣的:(python语言,python高级)