从 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 模块中定义全局变量的主要内容,如果未能解决你的问题,请参考以下文章

python接口自动化小技巧-全局变量

Python C API - 重新加载模块

无法从 Python C API 中内置的模块调用方法

Python基础03-函数详解

python学习-day15:局部变量与全局变量嵌套函数递归

python全局变量与局部变量