通过 C API 在 Python 模块中定义全局变量
我正在使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以在模块的初始化例程中使用 PyObject_SetAttrString ,第一个参数 < code>o 是您的模块(对
(PyObject*)
的转换),第二个参数attr_name
是“g”,第三个参数v< /code> 是一个变量
(或者任何其他值,
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 argumentattr_name
being "g", third argumentv
being a variable(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.