从 C API 在 Python 模块中定义全局变量
Posted
技术标签:
【中文标题】从 C API 在 Python 模块中定义全局变量【英文标题】:Define a global in a Python module from a C API 【发布时间】:2011-03-01 09:12:07 【问题描述】:我正在使用 C API 为 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】:您可以在模块的初始化例程中使用PyObject_SetAttrString,第一个参数o
是您的模块(转换为(PyObject*)
),第二个参数attr_name
是“g”,第三个参数v
是变量
PyObject *v = PyLong_FromLong((long) 23);
(当然也可以是其他任何值,23
只是一个例子!-)。
记得在之后取消引用v
。
还有其他方法,不过这个简单通用。
【讨论】:
谢谢,您可以查看我在问题中报告的完整解决方案吗? @wiso,是的,这 4 行正是我的想法(除了你在编辑中将属性命名为“L”,而在原始问题中它是“g”,但这无疑只是一个疏忽)。以上是关于从 C API 在 Python 模块中定义全局变量的主要内容,如果未能解决你的问题,请参考以下文章