我正在尝试访问导入模块时执行的代码。
可视化源或编辑它不是问题。我想知道存储这些指令的位置。
示例
module.py
def func():
print 'func'
print 'module'
Python控制台
>>> import module
module
>>> import dis
>>> dis.dis(module)
Disassembly of func:
0 LOAD_CONST 1 ('func')
3 PRINT_ITEM
4 PRINT_NEWLINE
5 LOAD_CONST 0 (None)
8 RETURN_VALUE
>>> dir(module)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'func']
我在哪里可以找到<function>
对象,或func_code或存储print 'module'
指令的任何内容?
答案 0 :(得分:0)
dis.dis([bytesource])
反汇编bytesource对象。 bytesource可以表示模块,类,方法,函数或代码对象。对于模块,它会反汇编所有函数。
由于module.py是一个模块,它会反汇编模块中的所有功能。作为&#34; print&#39;模块&#39;&#34;呼叫不在功能中,它不会被反汇编。
编辑:
要回答实际问题(对不起),当您导入模块本身时调用语句,我很确定您可以按如下方式解决它(尽管这有点可怕,因为解决方案去,这可能是一个更好的方法):
class importer():
def import_module():
import module
dis.dis(importer)
这是一种轻微的滥用行为,但嘿,似乎有效。