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

关于记忆化函数中嵌套inner函数的作用及意义的技术咨询

关于记忆化装饰器中inner函数的作用解析

inner函数具体做什么

inner是实现记忆化(缓存)逻辑的核心函数,每次调用被装饰后的facto时,实际执行的就是它。具体逻辑:

  • 接收参数num,先检查全局字典memory中是否已有该数字的阶乘结果
  • 如果没有:调用原始的阶乘函数f(也就是未被装饰的facto)计算结果,把结果存入memory缓存,打印提示信息
  • 如果已有:直接使用缓存中的结果,打印提示信息
  • 最后返回结果(无论缓存命中与否)

inner函数存在的必要性(不只是为了返回)

它的存在核心是利用闭包特性,同时满足装饰器的工作机制:

  1. 装饰器的要求:Python装饰器的本质是一个函数,它接收被装饰的函数作为参数,必须返回一个新的可调用对象(通常是函数),用来替换原函数。如果没有inner,memoize_factorial直接执行逻辑的话,只能在装饰阶段运行一次,无法实现每次调用facto都触发缓存检查的效果。
  2. 闭包的作用:inner作为闭包,能访问外层函数memoize_factorial的参数f(即原始阶乘函数),以及全局的memory缓存容器。这让它在每次被调用时,都能复用这些资源——既可以调用原函数计算新值,又能持续维护缓存的状态。

代码执行流程示例

当你用@memoize_factorial装饰facto时,Python会自动执行:

facto = memoize_factorial(facto)

此时facto变量不再指向原始阶乘函数,而是指向inner函数。

  • 第一次调用facto(5):执行inner(5),发现5不在memory中,调用原始facto计算5!。递归过程中,每次调用facto(n)都会触发inner(n)的缓存检查,依次将5、4、3、2、1的阶乘结果存入memory,最终返回120。
  • 第二次调用facto(5):执行inner(5),发现5已在memory中,直接返回缓存的120,无需重复计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 11:50:06