#python #main
#python #program-entry-point
Вопрос:
Если я хочу объяснить проблему упрощенным способом, у меня есть два A.ipynb
B.ipynb
файла и . В файле B
я вызываю функцию извне __main__
в файле A
, но я не могу получить к ней доступ и выдаю NameError: name 'do' is not defined
ошибку.
Файл A.ipynb
:
if __name__ == "__main__":
def do(value):
print(value)
def func(value):
do(value)
Файл B.ipynb
:
import import_ipynb
from A import *
func('some text')
Я хочу видеть «некоторый текст» в качестве вывода в консоли при B
выполнении файла. Я думаю, что-то вроде (любым способом, который можно сделать):
def func(value):
main().do(value)
может решить проблему.
Комментарии:
1.Вы определяете только, запускаете
do
ли вы A-файл. Если вы запустите B-файл,do
он не будет определен. В этом смыслif __name__ == "__main__"
.2. Итак, о чем вы спрашиваете? Вы определили что-то в функции main в файле A, что означает, что оно определяется только при выполнении основной функции файла A — это означает, что если вы импортируете файл A из файла B, эта вещь не будет определена, поскольку при импорте файла не выполняется его основная функция. Что вас смущает? Когда запускается main?
3. Хорошо, так в чем ваш вопрос ? Как предполагается использовать код и что должно произойти при его запуске?
4.
if
Оператор, который проверяет значение__name__
, не является точкой входа в скрипт, как функция, названнаяmain
в C или Java. Все программы на Python начинаются сверху и выполняют инструкции по порядку. Вы уверены, что вам вообще нужно такоеif
утверждение?
Ответ №1:
Я думаю, вы фокусируетесь на func()
том, что вы отсутствуете / не определены, когда на самом деле это то, что do()
отсутствует или не определено.
Ваш файл B может найти определение для func()
, но затем он пытается вызвать do()
то, что не было определено, потому if __name__
что предложение предотвратило это.