我們正在研究一些Python/C-API代碼,並且遇到了想要傳遞迴調的方法。該方法將定期更新回調作爲反饋的形式。事實證明,我們對定期反饋並不感興趣。禁用方法的默認反饋機制的唯一方法是傳遞某種回調。如何從Python創建lambda/C
我們採用的技術是聲明一個模塊級的功能,只是返回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").
所有的這種感覺就像我們是SP結束太多的時間來旋轉我們的車輪,而無所作爲。然後,它發生在我身上,好像是一個完美的使用lambda x:無。但花了一個小時的Python/C-API文檔後,我無法弄清楚如何創建lambda表達式。
我看到有關頁面http://docs.python.org/2/c-api/function.html上的封閉的引用,但我無法理清如何創建它們的細節。
任何指針(或引用RTFM)將不勝感激。
你可以使用'builtins.id'而不是調整你自己的無作用函數嗎? – SingleNegationElimination
在此鏈接(http://www.secnetix.de/olli/Python/lambda_functions.hawk)中,您可以找到更多的lambda示例。 – randiel
使用__builtins __。id()的想法可以節省我們用愚蠢的donothing()方法來污染我們的模塊(這就是爲什麼我將它投票推廣的原因)......但我真的希望有一些關於使用Python/C創建lambda的指針-API。 – user590028