我想知道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
and的条目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)>
注意:我随机选择了 marshal,它可以作为任何模块的通用替代品。