Ответ 1
Я могу воспроизвести это с помощью версии 3.1.0 ipython на Ubuntu
$ ipython
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
Type "copyright", "credits" or "license" for more information.
IPython 3.1.0 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython features.
%quickref -> Quick reference.
help -> Python own help system.
object? -> Details about 'object', use 'object??' for extra details.
In [1]: paste
def f(x):
return 2**x
## -- End pasted text --
In [2]: f(4)
Out[2]: 16
In [3]: history
paste
f(4)
history
In [4]: save ptest.py 1-3
The following commands were written to file `ptest.py`:
get_ipython().magic(u'paste ')
f(4)
get_ipython().magic(u'history ')
In [5]: cat ptest.py
# coding: utf-8
get_ipython().magic(u'paste ')
f(4)
get_ipython().magic(u'history ')
In [6]:
Но помощь для %save
гласит, что
Эта функция использует тот же синтаксис, что и% history для диапазонов ввода, затем сохраняет строки в указанном вами файле.
и это на самом деле то, что происходит. Это только сохранение команд, которые вы вводите в командной строке, а введенная вами команда paste
, которую магия преобразует в get_ipython().magic(u'paste ')
.
Интересно, что при попытке edit
функция, созданная с помощью paste
, помещает меня в vi
, смотря на ту же магическую команду, а не на вставленную функцию.
В то время как первое поведение может не быть ошибкой (даже если это не особенно полезно), это поведение редактирования определенно похоже на одно.