从C API在Python模块中定义全局变量
我正在用C语言的接口开发一个Python模块。我想知道如何创建一个在Python中被视为全局的变量。
举个例子,如果我的模块叫做module
,我想创建一个变量g
,它的作用是:
import module
print module.g
特别地,g
是一个整数。
来自Alex Martelli的解决方案
PyObject *m = Py_InitModule("mymodule", mymoduleMethods);
PyObject *v = PyLong_FromLong((long) 23);
PyObject_SetAttrString(m, "g", v);
Py_DECREF(v);
1 个回答
4
你可以在模块的初始化过程中使用 PyObject_SetAttrString。第一个参数 o
是你的模块的一个对象,记得要把它转成 (PyObject*)
类型;第二个参数 attr_name
是 "g";第三个参数 v
是你想要设置的一个变量。
PyObject *v = PyLong_FromLong((long) 23);
(当然,你也可以用其他值,23
只是个例子!)
记得在之后要减少 v
的引用计数。
还有其他方法可以做到,但这个方法简单且通用。