私たちはいくつかの Python/C-API コードに取り組んでおり、コールバックを渡されたいメソッドに遭遇しました。このメソッドは、定期的な更新をフィードバックとしてコールバックに送信します。結局のところ、私たちは定期的なフィードバックにはあまり関心がありません。メソッドのデフォルトのフィードバック メカニズムを無効にする唯一の方法は、何らかのコールバックを渡すことです。
私たちが採用した手法は、None を返すだけのモジュール レベル関数を宣言することです。つまり、次のようになります。
static PyObject*
donothing(PyObject* self, PyObject* args) {
return Py_None;
}
しかしもちろん、この関数もモジュールのメソッド テーブルに登録する必要があります。
static PyMethodDef methods[] = {
{"donothing", donothing, METH_VARARGS, "do nothing"},
...
{NULL}
};
次に、メソッドを呼び出すときに、このメソッドへの参照を取得する必要があります。つまり、次のようになります。PyObject_GetAttrString(module_reference, "donothing").
これらすべては、私たちが何もしないために車輪を回転させるのにあまりにも多くの時間を費やしているように感じます. それから、それは私に起こりました..ちょっと、 lambda x: Noneの完璧な使い方のようです。しかし、Python/C-API ドキュメントに 1 時間費やした後、ラムダを作成する方法がわかりません。
ページhttp://docs.python.org/2/c-api/function.htmlにクロージャーへの参照があることがわかりますが、それらを作成する方法の詳細を整理することはできません。
ポインタ (または RTFM への参照) は大歓迎です。