-4
#file cf.py
a=1
import cf
print(cf.a)
- Почему импортировать операции в нем модули не зацикливаться (модуль импорта сам)?
- Почему инструкция печати выполняется 2 раза в IDLE, а в консоли 1 раз?
#file cf.py
a=1
import cf
print(cf.a)
sys.modules
. sys.modules
- это dict, сопоставляющий имя модуля с кодом модуля. Все последующие импорты того же модуля находят имя модуля в sys.modules
и просто извлекают код модуля из sys.modules
dict. Таким образом, код в модуле выполняется только один раз, первый раз он импортируется. Вот почему ошибка не возникает при импорте cf
с cf
.cf.py
в окне IDLE и сделали «Run Module» (F5) в этом окне. Хорошо. Затем IDLE запускал код в файле. Это не то же самое, что импортcf
: он запустил код в cf
напрямую. Часть выполнения этого кода импортирует cf
, который печатает cf.a
. Еще одна часть запуска этого кода - снова! - печать cf.a
. Вот почему вы видели его дважды.Кстати, я не знаю, что вы подразумеваете под «и в консоли 1 раз». Но, опять же, вы точно не объяснили, что вы сделали. Когда я бегу cf.py
из консоли, я вижу 1
два раза, и по той же причине, я просто объяснил:
$ python cf.py
1
1
Спасибо. Я ошибочно запустил код при импорте функции консоли. – user2494676