Вызов функции вне __main__ function python

#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__ что предложение предотвратило это.