在ipython中保存函数定义

时间:2012-04-16 15:53:49

标签: python macros ipython

使用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 函数定义。

3 个答案:

答案 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

导入内容。