从C API在Python模块中定义全局变量

5 投票
1 回答
2390 浏览
提问于 2025-04-15 23:42

我正在用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 的引用计数。

还有其他方法可以做到,但这个方法简单且通用。

撰写回答