Оболочка Python и область действия execfile - PullRequest
1 голос
/ 22 августа 2010

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

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

defmyreload (): execfile ("main.py") execfile ("otherfile.py")

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

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

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 22 августа 2010

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

1 голос
/ 23 мая 2013

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

%run

и

%edit

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

См. Также http://ipython.org/ipython-doc/stable/interactive/tutorial.html

...