Если вы импортируете себя в Python, почему вы не получите бесконечный цикл?

Этот вопрос является ответом на следующий пост SO:

Как мариновать объект?

В этом потоке ОП случайно импортирует свой собственный модуль вверху того же модуля. Почему это не вызывает бесконечный цикл?


person froadie    schedule 24.08.2010    source источник


Ответы (5)


Модули импортируются только один раз. Python понимает, что он уже был импортирован, поэтому не делает этого снова.

См.: http://docs.python.org/tutorial/modules.html#more-on-modules

person carl    schedule 24.08.2010

Когда Python встречает оператор import, он сначала проверяет sys.modules на наличие модуля, прежде чем что-либо делать.

person chryss    schedule 24.08.2010

import module не перезагружает модуль, если он уже был импортирован

person Eton B.    schedule 24.08.2010

Я считаю, что python отслеживает, какие модули уже были импортированы, чтобы не тратить время на избыточный импорт. Каждый модуль можно импортировать только один раз.

person recursive    schedule 24.08.2010

Импорт в Python приводит к тому, что привязки пространства имен для импортируемого модуля помещаются в текущее пространство имен, если они еще не присутствуют. Если вы импортируете модуль дважды, он будет фактически импортирован (и, следовательно, выполнен) только один раз. Вот почему, когда вы импортируете модуль в себя, на самом деле ничего не происходит, так как привязки пространства имен уже присутствуют в текущем пространстве имен.

person Abhinav Sarkar    schedule 24.08.2010
comment
Первый и единственный ответ, говорящий о пространствах имен. - person Humphrey Bogart; 24.08.2010