タグ付けされた質問 「python-c-api」

27
致命的なエラー:Python.h:そのようなファイルまたはディレクトリはありません
C拡張ファイルを使用して共有ライブラリを構築しようとしていますが、最初に以下のコマンドを使用して出力ファイルを生成する必要があります。 gcc -Wall utilsmodule.c -o Utilc コマンドを実行すると、次のエラーメッセージが表示されます。 utilsmodule.c:1:20:致命的なエラー:Python.h:そのようなファイルまたはディレクトリのコンパイルは終了しませんでした。 私はインターネットで提案されたすべての解決策を試しましたが、問題はまだ存在しています。私は問題ありませんPython.h。私は自分のマシンでファイルを見つけることができました。
1193 python  gcc  python-c-api 

5
Python(およびPython C API):__new__と__init__
私が尋ねようとしている質問は、Pythonの__new__と__init__の使用の複製のようです?しかしかかわらず、それは私にはまだ間、まさに実用的な違いは不明だ__new__と__init__あります。 __new__オブジェクトを作成するためのもので__init__あり、オブジェクトを初期化するためのものであると急いで説明する前に、はっきりさせておきます。 実際、C ++で配置newがあり、オブジェクトの割り当てと初期化を分離している経験があるので、その区別は私にとって非常に自然です。 PythonのC APIのチュートリアルでは、このようにそれを説明します: 新しいメンバーは、タイプのオブジェクトを(初期化するのではなく)作成します。__new__()メソッドとしてPythonで公開されています。... 新しいメソッドを実装する1つの理由は、インスタンス変数の初期値を保証することです。 だから、ええ-私は得るものを__new__行いますが、これにもかかわらず、私はまだそれがPythonで便利だ理由を理解していません。与えられた例は、__new__「インスタンス変数の初期値を保証する」場合に役立つ可能性があることを示しています。さて、それはまさに何を__init__するのでしょうか? C APIチュートリアルでは、新しいタイプ(「Noddy」と呼ばれる)が作成され、タイプの__new__関数が定義されている例が示されています。Noddy型にはという文字列メンバーが含まれてfirstおり、この文字列メンバーは次のように空の文字列に初期化されます。 static PyObject * Noddy_new(PyTypeObject *type, PyObject *args, PyObject *kwds) { ..... self->first = PyString_FromString(""); if (self->first == NULL) { Py_DECREF(self); return NULL; } ..... } __new__ここで定義されたメソッドがない場合PyType_GenericNew、を使用する必要があることに注意してください。これは、すべてのインスタンス変数メンバーをNULLに初期化するだけです。したがって、この__new__メソッドの唯一の利点は、インスタンス変数がNULLではなく空の文字列として開始されることです。 しかし、なぜこれが便利なのでしょうか。インスタンス変数がデフォルト値に初期化されていることを確認したいのであれば、__init__メソッドでそれを実行できたでしょうか。
126 python  c  python-c-api 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.