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.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

そして、パッケージの内容は次のとおりです。

コンパイラ パッケージの内容を表示している Windows エクスプローラ

辞書に「余分な項目」があるのはなぜですか? また、そのsys.modules目的は何ですか? のようなモジュールはパッケージmarshalの一部ではありませんが、接頭辞が付いており、理由がわかりません。さらに、コンパイラパッケージをインポートした後にモジュールのエントリがあります。compiler'compiler.'marshalsys.modules

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

注: マーシャルをランダムに選択しました。これは、任意のモジュールの一般的な代替品として機能します。

4

0 に答える 0