Оболочка 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