Python高级教程之装饰器

注意点:


def w1(func):

print("---正在装饰1---")

def inner():

print("---正在验证权限1---")

return inner


def w2(func):

print("---正在装饰2---")

def inner():

print(---正在验证权限2---)

return inner

只要Python解释器执行到了这个代码,那么会自动进行装饰,而不是等到调用的时候财装饰@w1

@w1

@w2

def f1():

print("---f1---")

#在调用f1之前,已经进行装饰了

f1()

先开辟了两片内存空间,分别指向w1和w2

w2先对f1()进行装饰(等价于f1=w2(f1)),f1也对开辟了一块内存,指向f1

先到w2执行,把f1传给func,f1指向谁,此时w2中的func就指向谁,此时指向f1对应的那块内存,打印正在装饰2

在w2中,return inner  f1原本指向对应的空间,现在f1=w2(f1),则指向inner对应的函数

再执行,@w1(f1=w1(f1))f1传给func,f1指向谁,此时func就指向谁,此时指向w2中的inner,打印正在装饰1

再w1中return inner  f1原本指向w2中的inner,现在f1=w2(f1),则指向inner对应的函数

f最后一句,f1指向谁,就执行谁里面的代码,先执行w1中inner 打印正在验证权限1

后面接着func,指向w2中的inner,打印正在验证权限2,后面接着func,指向原f1 打印----f1----


没有更多推荐了,返回首页