私は Python-C 拡張機能について学んでおり、キーワード引数を使用するメソッドを PyCFunctions にキャストする必要がある理由について困惑しています。
PyCFunction についての私の理解は、PyObjects への 2 つのポインターを取り、PyObjects への単一のポインターを返すということです。
PyObject* myFunc(PyObject* self, PyObject* args)
キーワード引数を使用する関数を使用する場合、この関数は PyObjects への 3 つのポインターを取り、PyObjects への単一のポインターを返します。
PyObject* myFunc(PyObject* self, PyObject* args, PyObject* keywordArgs)
ただし、モジュール関数配列を作成すると (「adder」という関数の場合):
{ "adder", (PyCFunction)adder, METH_VARARGS | METH_KEYWORDS, "adder method" }
正常に動作します。float を int にキャストしても、float の非整数部分を使用する必要があるように感じます。この作品を見なかったら、うまくいかないと思っていたでしょう。ここで何が理解できませんか?
また、PyCFunctionWithKeywords への参照をいくつか見ました。これは、私が必要だと思った関数シグネチャを持っているようですが、コンパイラは「互換性のないポインター型」について不平を言いました (警告を出しました)。
PyCFunctionWithKeywords は廃止されましたか? そうでない場合、それを使用すべき/使用しなければならない時期はありますか?