1

私は最近、コーディングの問題をすべて解決してくれる、この素晴らしい Python 拡張パッケージ、Brian Hearsに出くわしました。問題は、一部の関数が期待される結果ではなくメモリ アドレスを返すことです。例えば:

>>> Parameterize(source, 256, 128)

Out[1]: <Parameterize.Parameterize at 0xda445f8>

私はこれを前に見たことがありません (適切な名前も知りません)。ただし、インターネットは、結果が保存されているメモリアドレスの表現であると教えてくれます。

私は本当に結果自体に興味があります。通常、Pythonのアドレスから実際のデータを抽出する方法、または関数が返す必要がある(または少なくともそうすべきだと思う)numpy配列を抽出するにはどうすればよいですか?

前もって感謝します。

編集: パッケージの名前とリンクを追加

4

3 に答える 3

2

ctypes で記述された非常に薄い Python ラッパーが一部のライブラリに対して実際にメモリ ポインターを返す可能性はありますが、そうではないようです。あなたが持っているような<Parameterize.Parameterize at 0xda445f8>表現は、Python オブジェクトの標準的な文字列表現です。

実際にはメモリアドレスを意味しますが、その番号は Python では使用されませんが、オブジェクトの ID として機能します。(あなたは " " でそれを手に入れますid(object))。

使用しているモジュールの使用方法を調べるには、インタラクティブ プロンプトを使用しているため、helpおよびdirイントロスペクション ビルトインを使用して、Parameterizeオブジェクトで使用できる属性とメソッドを見つけます。

>>> p =Parameterize(source, 256, 128)
>>> p
Out[1]: <Parameterize.Parameterize at 0xda445f8>
>>> dir(p)
>>> help(p)
于 2012-10-23T02:05:36.700 に答える
2

オブジェクトを返しています。やったほうがいい

 p = Parameterize(source, 256, 128)
 res = p.usefull_attribute

次に、オブジェクトの属性/プロパティから結果を取得します。Pythonの自己文書化(dir(p)help(p)(他の回答+コメントで指摘されているように))を使用して、Pythonにオブジェクトの属性/メソッドを教えてもらうことができます。

出力されているのは、オブジェクトのデフォルトの文字列表現です。これは、そのタイプと場所です。

于 2012-10-23T01:37:26.483 に答える
1

使用しているライブラリがC(またはC ++)で記述されていて、関数が「人気のある」(int、strなど)型を返す場合は、ctypesモジュール(boost.python、swing)を使用して、C呼び出しをPython型でラップできます。 。次に、このライブラリをPythonのライブラリとして使用できます。もちろん、ctypesを使用して変換(タイプを定義する必要があります)を行う必要があります。複雑な構造の場合、tcaswellが言ったように、おそらく自分でそれをしなければなりません。

于 2012-10-23T01:50:00.693 に答える