7

IPython セッションでは、通常、カスタム関数を定義します...問題は、これらの関数の実際のコードを見たい場合があることです。これまでのところ、これを表示する方法を見つけることができませんでした。を使用していますか?と ??単純に「動的に生成された関数。利用可能なソース コードがありません。」を返します。ユーザー定義関数のソース コードを表示する方法はありますか?

4

4 に答える 4

2

履歴を検索してみてください:

In [22]: for l in _ih:
   ....:     if l.startswith('def f'):
   ....:         print l
   ....:         
   ....:         
def f():
    a= 1
    b = 2
    return a*b

これは非常に基本的なものですが、より良いバージョンでは履歴を解析/実行し、関数を元に戻すことができるかどうかを確認します

于 2012-04-18T18:09:29.193 に答える
2

対話的に定義された関数のソースを探している場合は、iPython の履歴で最新の定義を見つけることができます。

[i for (i, l) in  enumerate(_ih) if l.startswith('def foo(')][-1]

次に、その行を編集できます。

%edit 42

関数定義を含むメモ帳または別のテキスト エディターが開きます。

または、ファイルに保存できます。

%save foo.py 42
于 2012-04-18T18:10:23.750 に答える
2

私はpython 2.7.4とiPython 0.13.2を使用しています。

??関数名の前に使用して、iPython で動的に作成された関数のソースを確認できます。

In [8]: ??sort_words
Type:       function
String Form:<function sort_words at 0x189b938>
File:       /tmp/ipython_edit_yc1TIo.py
Definition: sort_words(s)
Source:
def sort_words(s):
    x = re.findall(r'\W+(\w+)', s)
    x.sort()
    for i in x:
        print i

これは、iPython の新しいバージョンで利用できるようになったのでしょうか? どのバージョンを使用していますか?

于 2013-09-29T17:54:51.830 に答える
0

次の場合、IPython の関数は動的に生成されたと見なされます。

  • それらはメタプログラムされています-それらは別の機能によって作成されます。この場合、ソース コードはありません。存在しないだけです。

  • それらは作成された別の名前空間で参照されており、元の名前空間に関する情報はありません。この場合、元の場所を見つけて実行しますか?? そこから。

于 2013-09-29T19:17:15.633 に答える