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ますか?%editを使用すると、ipythonが定義にアクセスできるため、可能になるはずだと思います。

編集

で関数を編集した場合、行ベースの保存は機能しません%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内容を使用してを定義または再定義できます。

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最後に、 withの新しいバージョン%saveと次の%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 に答える