Когда я запустил dog.py (или cat.py), у меня нет проблем, и программа работает плавно.
AFAICT, что в основном потому, что сценарий импортируется под особым именем ("__main__"
), в то время как модуль импортируется под его собственным именем (здесь «собака» или «кошки»). NB: на самом деле загружается только различие между скриптом и модулем - передается аргумент во время выполнения python (python dog.py
) или импортируется из скрипта или любого модуля с оператором import
.
(вопросы На самом деле круговой импорт немного сложнее, чем то, что я описал выше, но я оставлю это для кого-то более знающих.)
Чтобы сделать длинную историю Короче говоря, для этого конкретного использования, за исключением (что на самом деле больше связано с побочным эффектом), Python делает не поддерживает циркулярный импорт. Если у вас есть функции (классы, что угодно), используемые другими скриптами или модулями, поместите эти функции в другой модуль. Или, если вы обнаружите, что два модуля действительно зависят друг от друга, вы можете просто перегруппировать их в один модуль (или перегруппировать части, которые зависят друг от друга в одном модуле и все остальное в одном или нескольких других модулях).
Кроме того: если это тривиальная утилита с одним выстрелом или что-то, что зависит только от stdlib, содержимое вашего скрипта часто лучше сводится к main
функции синтаксического анализа аргументов командной строки/чтения файлов конфигурации/независимо, импортирования необходимых модулей и начать эффективный процесс.
Спасибо, Бруно. Но почему сценарий не работает только при отладке? В чем разница? – riccio777
@ riccio777 Я не использую spyder, поэтому я не могу сказать, но я предполагаю, что он пытается импортировать ваши модули для проверки (под его настоящим именем модуля) и ошибочно пытается обрабатывать циклический импорт. –