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

为何返回内部函数的包装器每次返回的都是该内部函数的不同副本?

为什么f和f2是不同的函数对象?

首先看对应的代码示例:

def outer():
    def inner(a):
        return a
    return inner

f = outer()
print(f)  # <function outer.<locals>.inner at 0x1044b61e0>

f2 = outer()
print(f2)  # <function outer.<locals>.inner at 0x1044b6268> (Different from above)

二者存在差异的技术解释如下:

  • 每次调用outer()时,Python会进入一个全新的执行上下文,在这个上下文的局部作用域中重新创建inner函数对象。
  • 函数在Python里是一等对象,嵌套函数的定义过程会在每次外层函数调用时触发新的对象实例化:第一次调用outer()生成的inner实例被赋值给f,第二次调用outer()会生成另一个完全独立的inner实例,它拥有不同的内存地址,最终赋值给f2。
  • 尽管两个inner的代码逻辑完全相同,但它们是内存中两个独立的对象,因此f和f2指向的是不同的实体。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:35:19