装饰器调用顺序

先放结论:

  • 装饰顺序按靠近函数顺序执行,执行时由外而内。(即:执行顺序和装饰顺序相反)

 

话不多说,上俩栗子,就能明白咋回事。

 

1.装饰器完成装饰,但并不调用的输出结果

 1 def one(func):
 2     print('----1----')
 3     def two():
 4         print('----2----')
 5         func()
 6     return two
 7 
 8 def a(func):
 9     print('----a----')
10     def b():
11         print('----b----')
12         func()
13     return b
14 
15 @one    # @one相当于demo = one(demo)  装饰时候已经执行一次外部函数了。
16 @a
17 def demo():
18 print('----3----')

 

 

 2.装饰器完成装饰,调用后的输出结果

#代码同上,调用装饰器

demo()

 

 

3.解释

装饰顺序按靠近函数顺序执行:@a 靠近原函数,故先装饰它。再装饰@one。

(因为:@装饰的是它下面的函数,@one下面不是函数,就先装饰@a)

15 @one  
16 @a
17 def demo():
18     print('----3----')

 

 

装饰器的 @ 装饰时候已经执行一次外部函数了:故输出的是上例1的结果。

(因为: @one相当于demo = one(demo)  会调用一次外部函数)

 

 

而执行时,由外而内:先调用def two( ) ,再调用def b( ),故输出的是上例2的结果。

 

 

转载于:https://www.cnblogs.com/liangmingshen/p/9252002.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值