虚心请教,下面是我写的两个装饰器:
def decorator_a(fun):
print ('decorator_a')
def inner_a(*args, **kwargs):
print('inner_a')
return fun(*args, **kwargs)
return inner_a
def decorator_b(fun):
print ('decorator_b')
def inner_b(*args, **kwargs):
print('inner_b')
return fun(*args, **kwargs)
return inner_b
@decorator_b
@decorator_a
def ls():
print("func ls")
ls()
运行后,我期望的结果是:
decorator_b
decorator_a
inner_b
inner_a
func ls
实际上是:
decorator_a
decorator_b
inner_b
inner_a
func ls
我的问题是:为什么decorator_a会先被执行?
我是因为兴趣自学的python,很多地方都是摸着石头过河,代码有时候写的不是很直观!望谅解!!
该回答引用ChatGPT
在Python中,装饰器是按照从下往上的顺序应用的。也就是说,先应用最后一个装饰器,然后是倒数第二个,以此类推,最后是最上面的装饰器。因此,在你的代码中,装饰器b先被应用,而装饰器a后被应用。
你可以尝试交换两个装饰器的顺序,这样就会得到你期望的输出。具体来说,修改代码为:
@decorator_a
@decorator_b
def ls():
print("func ls")
ls()
不知道你这个问题是否已经解决, 如果还没有解决的话: