Оболочка Python и область действия execfile

Я работаю из оболочки ipython, и мне часто приходится перезагружать файлы сценариев, которые содержат мои незавершенные функции.

Внутри моего main.py у меня есть:

def myreload (): execfile("main.py") execfile ("otherfile.py")

Вызов myreload () работает нормально, если я уже запустил в том же сеансе ipython команды execfile напрямую.

Однако, по какой-то причине, если сеанс свежий и я только что вызвал execfile("main.py"), тогда myreload () фактически не делает функции изнутри otherfile.py доступными. Это не бросает никакой ошибки все же.

Есть идеи?

2 ответа

Решение

Функции создают новую область видимости. execfile() запускает скрипт в текущей области видимости. То, что вы делаете, не сработает.

Если вы хотите узнать, как правильно использовать ipython (то есть в интерактивном режиме), вам следует использовать магические команды, такие как:

%run

а также

%edit

Проверьте справку для этих функций с %run?, Это дает явные примеры.

Смотрите также http://ipython.org/ipython-doc/stable/interactive/tutorial.html

Другие вопросы по тегам