You need to enable JavaScript to run this app. Python获取外层函数所有属性:为何dir(outer)未列出inner函数
优惠活动
大模型
产品
解决方案
定价
更多

Python获取外层函数所有属性:为何dir(outer)未列出inner函数

问题解答

1. dir(outer)查询不到inner函数的原因

inner是outer的内部局部函数,属于outer的函数局部作用域成员:

  • 默认情况下,inner仅在outer被调用时才会被临时创建,函数执行结束后如果没有被外部引用就会被回收,全程不会自动绑定到outer函数本身作为属性存在。
  • dir()函数返回的是目标对象的所有内置属性、以及手动绑定到对象上的自定义属性,未手动绑定的局部作用域成员不会出现在返回结果里。

2. 将inner作为outer属性访问的实现方法

方法1:内部绑定(适配闭包场景)

在outer函数体内定义完inner后,手动将inner赋值为outer的属性即可,该方式保留了inner作为闭包访问outer局部变量的特性,需要至少调用一次outer才会触发绑定生效:

def outer(msg):
    def inner():
        print(msg)
    # 手动绑定inner到outer的属性
    outer.inner = inner
    return inner

# 调用一次outer完成绑定
returned_func = outer("Hello")
# 此时可直接访问outer.inner
print(outer.inner)
# dir(outer)返回结果会包含inner属性

⚠️ 注意:每次调用outer都会覆盖outer.inner的取值,最终存储的是最后一次调用outer时生成的inner实例。

方法2:外部绑定(无需调用outer即可生效)

如果inner不需要依赖outer的局部变量/入参,可以直接在全局作用域完成inner的定义和绑定,无需调用outer就能直接访问:

# 全局定义inner
def inner():
    print("Hello")

def outer(msg):
    return inner

# 直接在外部绑定为outer的属性
outer.inner = inner

# 无需调用outer即可直接访问
print(outer.inner)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 10:57:02