2013-04-15 3 views
1

Когда Python хочет импортировать модуль, он сначала будет выглядеть в sys.modules. Но так как пары словаря-значения словаря не в фиксированном порядке, как вы можете знать наверняка, какой из двух идентично названных модулей в sys.modules будет импортирован первым?Почему sys.modules выбрали словарь?

ответ

7

Поскольку это отображение, может быть be нет идентично названных модулей в sys.modules.

Точка зрения. Если используется оператор import foo и sys.modules['foo'], этот модуль возвращается. Нет доступа к файлам, не требуется код верхнего уровня для этого модуля.

Если foo нет, то sys.path определяет, где находится foo. Это значение представляет собой список, поэтому он имеет порядок, и поиск модуля foo проводится в соответствии с этим заказом.

+0

'>>> dict = {'a': 1, 'b': 2, 'b': 3}' then '>>> dict' возвращает' {'a': 1, 'b': 3 } '. Я не знаю, что это связано с моим ложным предположением, что я получу ошибку с момента, когда я назначил словарь, если ключи были идентичными. Я никогда не заходил достаточно далеко, чтобы снова распечатать настоящий словарь. – Bentley4

+0

@ Bentley4: Даже если это _did_ разрешить несколько экземпляров ... как порядок поможет вам узнать, какой из них? Вы знаете, что хотите «один из модулей с именем« foo »и что их два, и даже тот, который был сначала импортирован ... но не зная, хотите ли вы тот, который был импортирован первым, или тот, который был был импортирован второй, как это поможет? – abarnert

+0

Btw, ссылка [Python reference] (http://docs.python.org/2.7/reference/simple_stmts.html#the-import-statement) говорит, что после поиска '' sys.modules '' sys.meta_path', запрашиваются только тогда неявно определенные искатели (среди них 'sys.path', но не ясно, в каком порядке) – Bentley4

Смежные вопросы