2010-01-14 51 views
0

假設我有一些包含函數foo的嵌入式python代碼,獲取對該函數的引用(用於PyObject_CallObject)的最佳方式是什麼?按名稱獲取嵌入式python函數的C引用?

一種方法是讓某些函數隨函數名稱手動或通過反射來註冊每個函數。這似乎是矯枉過正。

另一種方法是創建一個「loader」函數,該函數接受函數名並返回對該函數的引用。更好,但我仍然需要用C註冊加載函數。我是否錯過了更好的方法來執行此操作,而無需編寫任何其他Python代碼?

回答

1

閱讀文檔中有關embedding Python的部分。我想你有一個包含該功能的模塊的參考。 最後有一個例子展示瞭如何從一個對象中獲取函數引用。

pFunc = PyObject_GetAttrString(pModule, argv[2]); 
/* pFunc is a new reference */ 

if (pFunc && PyCallable_Check(pFunc)) { 
    ... 
} 
Py_XDECREF(pFunc);