Как я могу предотвратить запуск встроенного кода при импорте моего модуля?

Я сделал программу под названием barcode.py который имел 4 функции и основной код.

Когда я импортирую это в другую программу, используя

import barcode

он запускает штрих-код программы и запрашивает ввод, как в основной программе. Я был удивлен, что это происходит, даже когда я еще не вызвал функцию и только импортировал barcode

Может кто-нибудь объяснить, почему это происходит и как я могу импортировать свой код без запуска основного кода в файле barcode.py?

1 ответ

Во-первых, ваша проблема не в IDLE конкретный.

Документация Python по импорту модулей говорит вам, что:

Модуль может содержать исполняемые операторы, а также определения функций. Эти операторы предназначены для инициализации модуля. Они выполняются только в первый раз, когда имя модуля встречается в операторе импорта. (Они также запускаются, если файл выполняется как скрипт.)

Что это означает, что когда вы import модуль, он будет запущен один раз, как если бы вы вызвали его непосредственно как скрипт (например, набрав barcode.py в командной строке в вашем примере).

Если вам нужен скрипт в модульном файле, который выполняется, если вы вызываете его автономно (например, barcode.py) но не когда это imported, используйте следующий шаблон из документации модуля Python:

if __name__ == "__main__":
    print("I've been run as a script")

Пример для проверки этой функциональности

Вы можете проверить в командной строке, что это работает - если вы сохраните скрипт выше, как, например, modulefile.py и беги

$ python modulefile.py

ты увидишь

I've been run as a script

Если вы начнете python и введите

>>> import modulefile

Вы не получите никакого выхода.

Другие вопросы по тегам