装饰器函数和被执行的函数到底什么时候被执行?函数加括号和不加括号的区别

本文探讨了Python装饰器的执行时机,指出装饰器在被装饰函数定义后立即运行,而被装饰函数仅在明确调用时执行。装饰器应返回函数本身,而非其结果。通过多个示例,详细解析了装饰器函数加括号与不加括号的区别,以及函数执行的逻辑。
摘要由CSDN通过智能技术生成

总结:

  1. 函数装饰器在被装饰的函数定义之后立即运行。
  2. 被装饰的函数只在明确调用时运行。
  3. 装饰器返回的应该是函数调用func而不是函数的运行结果func(),这也就是函数加不加括号的区别。

先看一下装饰器函数什么时候被执行。
例子一:
函数装饰器在被装饰的函数定义之后立即运行,所以尽管没有调用target(),但是装饰器函数还是有输出。
同时要注意deco返回的是被调函数的函数名——func,并没有调用这个func()函数。


def deco(func):
    print('running inner()')
    return func

@deco
def target():
    print("running target()")

# target() #注意:并没有调用target()

输出:
running inner()

例子二:如果装饰器函数调用了被装饰的函数,那么被装饰的函数会被执行。
注意:被装饰的函数target在return func()这里被调用。func后面有括号。


def deco(func):
    print('running inner()')
    return func()

@deco
def target():
    print("running target()")
 
# target() #注意:并没有调用target()

输出:
running inner()
running target()

例子三:当调用被装饰的函数时(target()没有被注释掉),此时运行函数其实就是运行装饰器。从代码中可以看出,装饰器函

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值