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

Python中如何获取模块顶层代码的code对象?

获取Python模块顶层代码的code对象

当然可以获取,但模块顶层代码的code对象不像函数那样有直接的__code__属性随时访问,得分两种场景处理:

1. 模块作为主程序正在执行时

此时可以通过栈帧直接获取顶层代码的code对象,用sys._getframe(0).f_code拿到当前顶层执行帧的code对象,示例如下:

修改你的测试文件:

import sys

myvar = 1
print('hello from top level')

def myfunction():
    print('hello from function')

# 获取顶层code对象
top_code = sys._getframe(0).f_code
# 查看常量集合,能找到顶层的目标字符串
print(top_code.co_consts)  # 输出会包含'hello from top level'

2. 模块已被导入,需要事后获取

模块加载完成后,顶层代码执行的栈帧已经销毁,没法直接拿到当时的code对象,但可以重新读取模块源代码,用compile()函数编译出对应的code对象:

import mymodule
import inspect

# 获取模块的源代码内容
source_code = inspect.getsource(mymodule)
# 编译成exec模式的code对象,参数依次为源码、模块文件路径、执行模式
top_code = compile(source_code, mymodule.__file__, 'exec')
# 查看常量集合
print(top_code.co_consts)  # 同样能找到'hello from top level'

需要注意:第二种方法得到的是重新编译后的code对象,逻辑上和模块实际执行时的一致,但如果模块加载后源代码被修改,结果可能和实际执行时的有差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 02:22:40