You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Python装饰器执行结果为400而非200?求技术解释

Python装饰器执行结果解析:为什么输出是400而非200?

先看原代码:

def decor1(func):
    def inner():
        x = func()
        return x * x
    return inner

def decor(func):
    def inner():
        x = func()
        return 2 * x
    return inner

@decor1
@decor
def num():
    return 10

print(num())

问题核心在于装饰器的叠加执行顺序:Python中多个装饰器是从下往上生效的——离被装饰函数越近的装饰器,越先执行。

具体执行流程拆解:

  • 第一步,先执行@decor装饰num函数:原num返回10,被decor包装后,调用时会先拿到原num的返回值10,再返回2*10=20。此时num已经变成了decor内部的inner函数,执行它会得到20。
  • 第二步,再执行@decor1装饰这个已经被decor处理过的函数:decor1的内部inner会调用这个“返回20”的函数,拿到20后返回20*20=400。

所以最终调用num()时,实际是执行了decor1的inner,结果自然是400。

如果想得到预期的200,只需要调换两个装饰器的顺序:把@decor放在@decor1上面,这样先执行平方(1010=100),再乘2(1002=200)。

内容的提问来源于stack exchange,提问作者Sv Prince

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 02:30:58