2

我想知道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.warningsand的条目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

包装内容是:

显示编译器包内容的 Windows 资源管理器

为什么字典中有“额外项目” sys.modules?它们是做什么用的?像这样的模块marshal不是compiler包的一部分,但带有前缀,'compiler.'我不明白为什么。此外,在导入编译器包后,还有一个marshal模块条目。sys.modules

sys.modules['marshal']
<module 'marshal' (built-in)>

注意:我随机选择了 marshal,它可以作为任何模块的通用替代品。

4

0 回答 0