У меня есть три файла, один из которых является основным файлом, который нужно запустить, а два других содержат служебные функции, как показано ниже. Все файлы находятся в одном каталоге, и я запускаю его на PyCharm.
# delta_plots.py - This is the main file
...
from delta_plots_utility_1 import *
from delta_plots_utility_2 import *
...
def print_parameter_header(params, flag):
batch_size, epochs, lr = params[0], params[1], params[2]
print("{} - Batch size: {}, Epochs: {}, Learning rate: {}".
format(flag.upper(), batch_size, epochs, lr))
...
if __name__ == '__main__':
# call the utility functions based on a condition
if (condition1):
utility_function_1()
elif (condition2):
utility_function_2()
# delta_plots_utility_1.py - Utility file 1
# this import statement is to import the print_parameter_header() function
# from the main file
from plot_delta_mp import *
def utility_function_1():
# this function makes a call to the print_parameter_header() function
...
print_parameter_header(params, flag)
...
# delta_plots_utility_2.py - Utility file 2
from plot_delta_mp import *
def utility_function_2():
# this function also makes a call to the print_parameter_header() function
...
print_parameter_header(params, flag)
...
Проблема в том, что в основном файле, если условие1 истиннозатем я вынужден поместить оператор импорта для служебного файла 1 перед оператором импорта для служебного файла 2, и наоборот.
В противном случае я получаю следующую ошибку: NameError: name 'print_parameter_header' is not defined
Я также попытался импортировать файлы как модули и затем получить доступ к функции как module.print_parameter_header()
, но это тоже не помогает.
У меня были следующие вопросы по этому поводу:
- Из чегоЯ так понимаю, порядок импортных выписок не важен. Так почему это происходит? Почему изменение порядка разрешает ошибку?
- Может ли это быть из-за цикличного импорта? Поскольку я также импортирую основной файл в функции утилиты.
- Если да, то можно ли определить
print_parameter_header()
в файлах утилиты? Хотя это было бы излишним, это хорошая практика?