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

Python装饰器中内部函数inner如何访问参数num?

关于Python装饰器中参数访问的问题解答

核心原因:函数参数作用域与装饰器执行流程

要搞懂这个问题,从两个关键点拆解:

  • 函数参数的作用域规则:每个函数的参数都是自身局部作用域的变量,只有该函数能直接访问。外部函数无法读取内部函数的参数,反之内部函数可以访问外部函数的变量(闭包特性),但这里的num是inner自己的参数,和外层facto_decorator没有关联。

  • 装饰器的实际执行流程:

    1. 当用@facto_decorator装饰facto函数时,Python会自动执行facto = facto_decorator(facto)。这个阶段facto_decorator只接收被装饰的原函数func作为参数,完全没接触到num——毕竟此时还没调用facto函数,自然不会传入num的值,所以facto_decorator根本看不到num。
    2. 当你调用facto(a)的时候,其实调用的是facto_decorator返回的inner函数,也就是inner(a)。这时候num是inner的形参,a是传入的实参,num属于inner的局部作用域,所以inner可以直接访问它。

结合代码实例再梳理

比如你输入a=3:

  • 装饰阶段:Python把原facto函数传给facto_decorator,facto_decorator返回inner函数,此时facto变量指向的是inner。
  • 第一次调用facto(3):实际执行inner(3),num=3被传入inner,inner用这个参数检查memory字典,调用原facto函数计算结果并保存。
  • 第二次调用facto(3):还是执行inner(3),num=3再次传入,inner直接从memory取结果返回。

整个过程中,facto_decorator自始至终都没机会接触到num参数,只有inner作为实际被调用的函数,才会接收并使用num。

内容的提问来源于stack exchange,提问作者Sumit Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 14:37:55