【问题标题】:Define a global in a Python module from a C API从 C API 在 Python 模块中定义全局变量
【发布时间】: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);

【问题讨论】:

    标签: python c global-variables python-module python-c-api


    【解决方案1】:

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

    PyObject *v = PyLong_FromLong((long) 23);
    

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

    记得在之后取消引用v

    还有其他方法,不过这个简单通用。

    【讨论】:

    • 谢谢,您可以查看我在问题中报告的完整解决方案吗?
    • @wiso,是的,这 4 行正是我的想法(除了你在编辑中将属性命名为“L”,而在原始问题中它是“g”,但这无疑只是一个疏忽)。
    猜你喜欢
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    • 2020-07-19
    • 2012-03-25
    • 2017-06-02
    • 2021-06-26
    • 1970-01-01
    • 2016-02-25
    相关资源
    最近更新 更多