16

使用 ipython 时,我经常想保存我在会话期间定义的特定函数,例如:

In [1]: def func1():
...:        pass
...: 

In [2]: %save func1.py func1
func1 is neither a string nor a macro.

相反,我必须从中选择函数定义行号enumerate(_ih),或者如果我有函数,则从 vim 手动复制和粘贴%edit

有没有办法实现%save func1.py func1?我觉得这应该是可能的,因为 ipython 在使用 %edit 时可以访问定义。

编辑

如果我在某些时候使用%ed. 在这种情况下,我正在寻找一种方法来保存的函数定义。

4

3 回答 3

20

您可以使用以下方法保存行的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-ing 你的函数之后func1,你可以使用 IPython 获得以下输出_

In [4]: _
Out[4]: 'def func1():\n    print "Hello World"\n\n'

%macro然后,您可以使用更新func1内容定义或重新定义 a ,如下所示:

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"

最后,您可以像这样保存新版本的func1with%save和 new %macro

In [6]: %save func1.py new_func1_macro
The following commands were written to file `func1.py`:
def func1():
    print "Hello World"

希望澄清。

于 2012-04-16T16:00:52.097 回答
4
 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
于 2014-01-08T21:16:18.920 回答
0

对我来说,ipython 最简单的方法是调用:

%edit foo

然后在 vim 中执行:

:saveas directory/name.py
:x

这样您就可以为自己获得一份副本。如果要将其转储到特定文件中,请使用 vim

:read directory/file

导入内容。

于 2015-07-07T20:58:57.993 回答