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

Rug*_*rra 5 c python python-module global-variables python-c-api

我正在使用 C API 为 Python 开发一个模块。如何创建一个在 Python 中被视为全局的变量?

例如,如果我的模块是module,我想创建一个g执行此任务的变量:

import module
print module.g
Run Code Online (Sandbox Code Playgroud)

尤其,g是一个整数。

Alex Martelli 的解决方案

PyObject *m = Py_InitModule("mymodule", mymoduleMethods);
PyObject *v = PyLong_FromLong((long) 23);

PyObject_SetAttrString(m, "g", v);
Py_DECREF(v);
Run Code Online (Sandbox Code Playgroud)

Ale*_*lli 4

您可以在模块的初始化例程中使用PyObject_SetAttrString ,第一个参数是模块o(的转换),第二个参数是“g”,第三个参数是变量(PyObject*)attr_namev

PyObject *v = PyLong_FromLong((long) 23);
Run Code Online (Sandbox Code Playgroud)

(当然或者任何其他值,23只是一个例子!-)。

请记得v事后 decref。

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