Импорт модуля «Logging» стандартного загрязняет sys.modules с кучей фиктивных записей:Почему в модулях sys.modules есть фиктивные модули?
Python 2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)] on win32
>>> import sys
>>> import logging
>>> sorted(x for x in sys.modules.keys() if 'log' in x)
['logging', 'logging.atexit', 'logging.cStringIO', 'logging.codecs',
'logging.os', 'logging.string', 'logging.sys', 'logging.thread',
'logging.threading', 'logging.time', 'logging.traceback', 'logging.types']
# and perhaps even more surprising:
>>> import traceback
>>> traceback is sys.modules['logging.traceback']
False
>>> sys.modules['logging.traceback'] is None
True
Так импортировать этот пакет помещает дополнительные имена в sys.modules, за исключением того, что они не являются модулями, только ссылки на None , У других модулей (например, xml.dom и encodings) есть эта проблема. Зачем?
Edit: Опираясь на ответ bobince, есть страницы, описывающие the origin (смотрите раздел «пустышка Запись в sys.modules») и future из функции.
Хорошая ссылка ... Я на самом деле не заметил, что это документировано где-то раньше. Очевидно, почему-то я не искал очевидного титула «The Knights Who Say Neeeow ... Wum ... Ping». Ах, Python ... – bobince
Я собирался опубликовать точный дубликат - мой второй сегодня: P –