2013-10-04 6 views
-4
#file cf.py 
a=1  
import cf 
print(cf.a) 
  1. Почему импортировать операции в нем модули не зацикливаться (модуль импорта сам)?
  2. Почему инструкция печати выполняется 2 раза в IDLE, а в консоли 1 раз?

ответ

1
  1. Первый раз модуль импортируется, запись для него производится в sys.modules. sys.modules - это dict, сопоставляющий имя модуля с кодом модуля. Все последующие импорты того же модуля находят имя модуля в sys.modules и просто извлекают код модуля из sys.modules dict. Таким образом, код в модуле выполняется только один раз, первый раз он импортируется. Вот почему ошибка не возникает при импорте cf с cf.
  2. Вы не объяснили точно что вы сделали с IDLE. Мое предположение: вы открыли cf.py в окне IDLE и сделали «Run Module» (F5) в этом окне. Хорошо. Затем IDLE запускал код в файле. Это не то же самое, что импортcf: он запустил код в cf напрямую. Часть выполнения этого кода импортирует cf, который печатает cf.a. Еще одна часть запуска этого кода - снова! - печать cf.a. Вот почему вы видели его дважды.

Кстати, я не знаю, что вы подразумеваете под «и в консоли 1 раз». Но, опять же, вы точно не объяснили, что вы сделали. Когда я бегу cf.py из консоли, я вижу 1 два раза, и по той же причине, я просто объяснил:

$ python cf.py 
1 
1 
+0

Спасибо. Я ошибочно запустил код при импорте функции консоли. – user2494676

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