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

发布于 2024-09-05 05:10:22 字数 428 浏览 5 评论 0原文

我正在使用 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);

I am developing a module for Python using a C API. How can I create a variable that is seen as global from Python?

For example, if my module is module, I want to create a variable g that does this job:

import module
print module.g

In particular, g is an integer.

Solution from Alex Martelli

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

PyObject_SetAttrString(m, "g", v);
Py_DECREF(v);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

感情废物 2024-09-12 05:10:22

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

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

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

请记住之后 decref v

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

You can use PyObject_SetAttrString in your module's initialization routine, with first argument o being (the cast to (PyObject*) of) your module, second argument attr_name being "g", third argument v being a variable

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

(or whatever other value of course, 23 is just an example!-).

Do remember to decref v afterwards.

There are other ways, but this one is simple and general.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文