НЕАКТИВНЫЙ Python: Выполненное основное?

Я нахожусь в НЕАКТИВНОМ:

>>> import mymodule
>>> # ???

После импорта модуля с:

if __name__ == '__main__':
    doStuff()

Как я на самом деле звоню main от НЕАКТИВНОГО?

5
задан sorin 7 September 2010 в 10:09
поделиться

6 ответов

Условие if на __name__ == '__main__' предназначено для того, чтобы код запускался при непосредственном выполнении вашего модуля, а не запускался при его импорте. На самом деле здесь нет такого понятия "main", как, например, в Java. Поскольку Python интерпретируется, все строки кода считываются и выполняются при импорте/запуске модуля.

Python предоставляет механизм __name__ для того, чтобы вы могли отличить случай импорта от случая, когда вы запускаете свой модуль как сценарий, т.е. python mymodule.py. В этом втором случае __name__ будет иметь значение '__main__'

Если вам нужен main(), который вы можете запустить, просто напишите:

def main():
   do_stuff()
   more_stuff()

if __name__ == '__main__':
   main()
12
ответ дан 18 December 2019 в 09:05
поделиться

РЕДАКТИРОВАТЬ: обновлен этот старый ответ, так как execfile был удален в Python 3.

С Python 2

Используйте execfile (т.е. execfile (file_path) ) вместо использования импорта.

С Python 3

Используйте модуль runpy , как предложено в ответе Карлеса Барробеса .

Обновление:

Цель условия if __name__ == '__main __' состоит в том, чтобы код внутри блока «if» , а не выполнялся при импорте модуля . Такой код будет запускаться только тогда, когда файл запускается напрямую, например, запустив «python filename » из командной строки или используя execfile (_filename _) .

По запросу, пример использования execfile. В C: \ my_code.py :

if __name__ == '__main__':
    print "Hello World!"

Затем в интерпретаторе:

>>> execfile("C:\\my_code.py")
Hello world!
0
ответ дан 18 December 2019 в 09:05
поделиться

Если вы импортируете что-то, то это не main. Вам нужно запустить его из меню или в качестве аргумента при запуске idle.

3
ответ дан 18 December 2019 в 09:05
поделиться

Я предполагаю, что вы вызываете 'main' то, что у вас есть после if __name__ == '__main__'. Поэтому, чтобы вызвать его:

>> import mymodule
>> mymodule.doStuff()

Иначе, если у вас действительно есть функция main в вашем модуле, тогда,

>> import mymodule
>> mymodule.main()
1
ответ дан 18 December 2019 в 09:05
поделиться

Все, что вам нужно сделать, это вызвать саму основную функцию, как сказал Хоакин. Я просто держу терминал открытым в том месте, где находится файл, и повторно выполняю команду, когда мне это нужно. Последний метод - использовать IDE, например geany или Idle, открыть ее с помощью (файл> открыть) и нажать F5.
У вас есть:

if __name__ == '__main__':
doStuff()

, который на самом деле создан для предотвращения запуска основной функции, если она импортирована.

0
ответ дан 18 December 2019 в 09:05
поделиться

Я нашел другой способ запустить модуль по имени в Python 2.6:

>>> import runpy
>>> runpy.run_module('mypack.mymodule')

run_module возвращает словарь со всеми созданными атрибутами

http: // docs .python.org / library / runpy.html? highlight = runpy # runpy.run_module

1
ответ дан 18 December 2019 в 09:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: