1) IDLE не использует IPython, поэтому сравнение неуместно.
2) Команда run
в Canopy помещает стандартную команду ipython %run
magic там, где вы можете ее увидеть, в командной строке ipython в Canopy и выполняет ее.
3) То, что вы сообщаете, является нормальным поведением команды ipython run magic. Это немного нелогично при первом знакомстве; краткое объяснение заключается в том, что глобальное пространство имен запускаемого модуля отличается от глобального пространства имен интерпретатора ipython. После запуска модуля его пространство имен копируется в пространство имен интерпретатора (именно поэтому a
определено в интерпретаторе), но выполнение функции assign
(которая была определена в модуле и чья глобальная команда, следовательно, относится к глобальному пространству имен модуля) , изменяет a
в пространстве имен модуля, а не его копию в пространстве имен интерпретатора.
4) Это может показаться излишне запутанным поведением, но цель состоит в том, чтобы убедиться, что модули, запускаемые из командной строки ipython, запускаются «чистыми» от любых обломков, которые могут присутствовать в пространстве имен интерпретатора.
5) Если вы не хотите такого поведения, используйте %run -i mymodule.py
, что заставит модуль работать непосредственно в глобальном пространстве имен интерпретатора. Если вы сделаете это, ваш пример будет действовать так же, как Idle. В Canopy самый простой способ сделать это — нажать стрелку вверх в оболочке Python, чтобы вызвать команду %run
, а затем отредактировать ее, чтобы вставить -i
.
6) Комментатор Padraic выше говорит, что он не может воспроизвести это в ipython. Единственное объяснение, которое я вижу, это то, что он настроил IPython для запуска по умолчанию в режиме -i
, или что он на самом деле не запускает фрагмент кода OP, а вместо этого выполняет эти команды непосредственно в интерпретаторе, используя только пространство имен интерпретатора. .
person
Jonathan March
schedule
09.06.2014
import *
этот код из модуля? - person user2357112 supports Monica   schedule 09.06.2014run
фрагмент OP в ipython или просто вводили каждую команду в командной строке ipython? - person Jonathan March   schedule 09.06.2014