先来看一个简单的装饰器:
def decoration(fun):
def inner(x, y):
a = fun(x, y)
print(a)
return a
return inner
@decoration
def fun(x, y):
return x + y
fun(4, 5)
这个的功能就是在原基础上增加了个打印的功能, 那么问题来了, python是怎样一步一步执行这段代码呢?
先来看一下我的猜想: @decoration 其实就相当于: fun = decoration(fun)
python自上往下运行到@decoration时就会执行fun = decoration(fun)语句, 而不是立马运行到def fun(x, y)那里, 不信, 你可以运行一下这个代码:
def decoration(fun):
def inner(x, y):
a = fun(x, y)
print(a)
return a
return inner
@decoration
def fun(x, y):
return x + y
运行结果:
我们可以看到没有运行结果, 但是, 若在decoration内部加个print语句会如何?
def decoration(fun):
print('我成功运行')
def inner(x, y):
a = fun(x, y)
print(a)
retu