我想知道sys.modules
字典的内容。例如,当我导入compiler
包时:
>>> import compiler
>>> for k in sys.modules:
... if k == 'compiler' or k.startswith('compiler.'):
... print k
...
compiler.sys
compiler.ast
compiler.token
compiler
compiler.consts
compiler.warnings
compiler.transformer
compiler.struct
compiler.parser
compiler.symbol
compiler.imp
compiler.visitor
compiler.cStringIO
compiler.os
compiler.compiler
compiler.syntax
compiler.future
compiler.dis
compiler.pycodegen
compiler.misc
compiler.pyassem
compiler.types
compiler.symbols
compiler.marshal
为什么有compiler.warnings
和compiler.marshal
这样的条目?它们不是compiler
包的一部分,也不是模块的实际属性:
>>> for k in sys.modules:
... if k.startswith('compiler.') and hasattr(compiler, k.split('.')[1]):
... print k
...
compiler.ast
compiler.consts
compiler.warnings
compiler.transformer
compiler.visitor
compiler.syntax
compiler.future
compiler.pycodegen
compiler.misc
compiler.pyassem
compiler.symbols
包装内容为:
为什么sys.modules
字典中的“额外项目”及其用途是什么?像marshal
这样的模块不是compiler
包的一部分,但以'compiler.'
为前缀,我不明白为什么。此外,导入编译器包后,marshal
中的sys.modules
模块有一个条目。
sys.modules['marshal']
<module 'marshal' (built-in)>
注意:我随机选择了元帅,它可以作为任何模块的一般替代品。