12

Ipython 0.13.1 は
、os.path.abspath?? などのPython ライブラリからオブジェクトのソースを出力できます。
しかし、ipython で %ed マジックを使用して定義したオブジェクトのソース コードを出力できません

たとえば、%ed マジックを使用してクラス名を定義します。

%ed  

それから

class Name(object):
    """docstring for Name"""
    name = 'hong'
    def __init__(self, arg):
        super(Name, self).__init__()
        self.arg = arg
    def pri():
        print 'class Name'

ipython に戻ると、クラス Name のソース コードが表示されません。

In [59]: Name??
Type:       type
String Form:<class '__main__.Name'>
Docstring:  docstring for Name
Constructor information:
Definition:Name(self, arg)

これは IPython のバグですか?

4

2 に答える 2

13

--OPがこれを言及した後の編集は、ipython itselfで見られます。

%ed myfunc と入力した後に表示されるエラー メッセージはありますか? 他の人が問題を見つけるのに役立つ可能性のある貼り付け。

- -アップデート:

Name?? を試すと短いバージョンのソース コードも得られますが、Name.pri?? Name クラスの pri() メンバー関数の完全なソース コードを教えてください。そのため、ipython には、クラスの完全なソース コードを提供しないという規則がある場合があります。

これが私の相互作用です:

    In [2]: Name??
    Type:       type
    String Form:<class '__main__.Name'>
    Docstring:  docstring for Name
    Constructor information:
     Definition:Name(self, arg)

    In [3]: Name.pri??
    Type:       instancemethod
    String Form:<unbound method Name.pri>
    File:       /tmp/ipython_edit_8YOfN9.py
    Definition: Name.pri()
    Source:
        def pri():
            print 'class Name'

    In [4]:
于 2012-12-17T22:21:13.927 に答える
4

IPython の最近のバージョン (正確なバージョン番号がわからない) では、実際にソースが表示されます。

IPython 0.13 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: %ed
IPython will make a temporary file named: /var/folders/88/zgy_z51x1fn2mp_7vmkj3phm0000gn/T/ipython_edit_g9xYY4.py
Editing... done. Executing edited code...
Out[1]: 'def f(a):\n\treturn a + 3\n'

In [2]: f(4)
Out[2]: 7

In [3]: f??
Type:       function
String Form:<function f at 0x18ddb30>
File:       /var/folders/88/zgy_z51x1fn2mp_7vmkj3phm0000gn/T/ipython_edit_g9xYY4.py
Definition: f(a)
Source:
def f(a):
        return a + 3

ソースを取得するには、他に 2 つの方法があります。1 つは、 を呼び出した行に戻ることができれば%ed、戻り値はソース コードである必要があります (ここでは、これはOut[1]であるため、 を実行できますprint Out[1])。もう 1 つは call です%ed f。これは、 の現在の定義をエディターにロードし、定義fを編集できるようにするものです。

于 2012-12-19T12:48:52.223 に答える