Перенос данных из файла Python в другой

1

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

Пример:

MainFile.py:

import Base_params
import Liner

Base_params.py:

no_of_slices=int(input('Enter no. of Slices'))
sub_slice=int(input('enter sub slice'))

Liner.py:

from PIL import Image
import shutil
from Base_params import no_of_slices, sub_slice
Теги:
python-3.x
input
python-import

1 ответ

0
Лучший ответ

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

Когда модуль импортируется в первый раз, создается пустой объект модуля. Затем выполняется его код, и любые имена, которые вы связываете, помещаются в его словарь, который также является глобальным пространством имен для модуля. В вашем случае это будет означать запуск кода Base_params.py и создание имен no_of_slices и sub_slice на основе пользовательского ввода.

Когда тот же самый модуль импортируется впоследствии, его код не запускается (что вас беспокоит). Вместо этого возвращается ссылка на объект из sys.modules. Оператор import всегда проверяет, загружен ли модуль, прежде чем пытаться запустить его снова.

Причина, по которой создание пустого объекта модуля (и размещение его в sys.modules перед запуском кода модуля очень важно, - это то, что большинство модулей имеют рекурсивный импорт). Маркировка модуля как уже импортированного гарантирует, что все бесконечные циклы будут разбиты до того, как они произойдут.

В вашем случае отлично определить модуль констант, который запрашивает ввод пользователя. Первый модуль, который import Base_params, инициирует выполнение input инструкций. Все последующие вхождения import Base_params будут просто связывать sys.modules['Base_params'] с любым именем Base_params в вашем пространстве имен. Второго запроса для no_of_slices и sub_slice.

Ссылки на официальную документацию, которую я предоставил, объяснят все, что я пропустил.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню