使用ipython时,我经常要保存我在会话期间定义的特定功能,例如:
In [1]: def func1():
...: pass
...:
In [2]: %save func1.py func1
func1 is neither a string nor a macro.
相反,我必须从enumerate(_ih)
中选择函数定义行号,或者如果我有%edit
'函数,则从vim手动复制和粘贴。
有没有办法实现%save func1.py func1
?我觉得应该可以,因为ipython在使用%edit时可以访问该定义。
修改
如果我在某个时刻使用%ed
编辑了该功能,则基于行的保存功能无效。我正在寻找一种方法来保存 new 函数定义。
答案 0 :(得分:17)
您可以使用以下内容1
保存行%save
的内容:
In [2]: %save func1.py 1
The following commands were written to file `func1.py`:
def func1():
pass
%save
上的帮助可用于:
In [2]: %save?
Type: Magic function
...
Docstring:
Save a set of lines or a macro to a given filename.
Usage:
%save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
您可以%edit
功能正文:
In [3] %edit func1
done. Executing edited code...
在%edit
使用函数func1
之后,您可以使用_
从IPython获取以下输出:
In [4]: _
Out[4]: 'def func1():\n print "Hello World"\n\n'
然后,您可以使用更新%macro
内容定义或重新定义func1
,如下所示:
In [5]: %macro new_func1_macro _
Macro `new_func1_macro` created. To execute, type its name (without quotes).
=== Macro contents: ===
def func1():
print "Hello World"
最后,您可以使用func1
和新%save
保存新版%macro
,如下所示:
In [6]: %save func1.py new_func1_macro
The following commands were written to file `func1.py`:
def func1():
print "Hello World"
希望澄清。
答案 1 :(得分:3)
In [1]: def a():
...: print('hello')
...: return
In [2]: from inspect import getsource
In [3]: %save a.py getsource(a)
The following commands were written to file `a.py`:
def a():
print('hello')
return
答案 2 :(得分:0)
对我来说,从ipython最简单的方法就是打电话:
%edit foo
然后在vim中:
:saveas directory/name.py
:x
这样你就可以获得一份副本。如果要将其转储到特定文件中,请使用vim
:read directory/file
导入内容。