我必须编写一个来自第三方包的C模块的python扩展。模块包含一些方法的声明,以及模块级别的以下变量的声明:
int mcnumipar = 13;
struct my_struct {char *name;
void *par;
enum instr_formal_types type;
char *val;};
struct my_struct mcinput[mcnumipar+1] = {
"E0", &mcipE0, instr_type_double, "4.94",
"dE", &mcipdE, instr_type_double, "0.24",
"dt", &mcipdt, instr_type_double, "6.4e-6",
"coh", &mcipcoh, instr_type_string, "Rb_liq_coh.sqw",
"inc", &mcipinc, instr_type_string, "Rb_liq_inc.sqw"
};
我成功地使用PyMethodDef
机制将C方法导出到python扩展,如python/capi文档中所述。不幸的是,我的全局变量失败了。在
有没有办法将这些变量(mcnumipar&mcinput)导出到python中 延期?在
非常感谢
埃里克
请检查Cpython函数: PyModule_AddIntConstant,PyModule_AddStringConstant,PyModule_AddObject
示例:
这里有一个完整的教程,其中有几个对我有用的用例:http://pythonextensionpatterns.readthedocs.io/en/latest/module_globals.html
谨致问候
巴勃罗
当然可以。最简单的方法可能是用^{} 为这些变量创建Python对象,然后使用^{} 将它们添加到module对象(使用^{cd2>}创建的对象)。在
如果这些全局变量的内容可能会随着时间而变化,并且您希望Python代码能够看到最新的值,那么最好公开返回当前值的额外方法。在
作为第三种选择,您可以相当容易地使用ctypes来检查甚至更改这些变量的当前值。为API的一部分构建一个真正的Python-C模块,并通过ctypes公开其余部分,这可能有点奇怪,但它最终可能会满足您的需要。在
相关问题 更多 >
编程相关推荐