AFAICT (ваш вопрос все еще довольно неясен), похоже, у вас есть две проблемы здесь.
Первый касается импорта и пространств имен Python. Импорт Python не включает в себя C или PHP, поэтому импорт модуля не делает имена, определенные в модуле, непосредственно доступными в пространстве имен импортера, вы должны использовать полное имя ("."). Кроме того, Python не имеет пространства имен «global global», «глобалы» Python являются глобальными только для пространства имен текущего модуля, поэтому определение глобального имени в модуле «a» не делает его волшебным образом доступным для модулей, импортируемых модулем ». а». Это означает, что ваш foo_function
в code_foo.py
не может напрямую обращаться к именам, определенным в вашем основном скрипте.
На самом деле - и это вторая проблема - ваша проблема исходит от foo_function
в зависимости от глобального имени, которое определено в другом месте. Это ошибка дизайна. Как правило, вы не должны использовать глобалы, когда они вам не нужны, и вам очень редко нужны глобалы. Просто напишите свои функции, чтобы они принимали «внешние» значения в качестве аргумента, и все станет намного проще и намного проще для чтения, тестирования и обслуживания.
В вашем случае все, что вам нужно сделать, это 1 / переписать foo_function()
, так что он принимает J
в качестве аргумента и 2 / переписать multirun
, чтобы он получил J
из ваших «входных» модулей и передает его foo_function
:
# code_foo.py
def foo_function(j):
a = j
a += 3
print(a)
и
# multirun.py
import importlib
import code_foo
def main():
inputs = ["Input_0%s" % i for i in range(1,3)]
for modname in inputs:
module = importlib.import_module(modname)
j = module.J
code_foo.foo_function(j)
if __name__ == "__main__":
main()
В качестве примечания: соглашения об именах в python должны использовать имена all_lower для модулей и переменных - имена ALL_CAPS для псевдоконстант.