python - 是否可以从现有变量的名称中获取 PyObject 引用?

标签 python python-2.7 python-c-api pyobject

<分区>

有没有办法获取现有对象的对象引用, 在嵌入式 Python 代码中?

换句话说: 如果名为“obj”的对象已经存在(由脚本创建), 我需要将它“转换”为 PyObject* 引用,是否有类似以下的函数:PyObject *getObjectReference(char *name)?

编辑: 举个例子, 假设我在代码的一部分中导入了一些模块,使用

PyRun_SimpleString("var = 1");

(或者它也可以是定义相同变量的外部脚本)

现在,在代码的另一点我想获取该变量。我正在寻找类似的东西

PyObject *varPy = PyObject_GetGlobalObject("var");

"reading a global variable of python in c "部分回答了我的问题,隐含地说如果没有对创建它的模块的引用就不可能检索全局定义的变量。这是正确的吗?

最佳答案

组装从 DavidW 收集的信息(感谢您的帮助),作者 reading a global variable of python in c以及我所做的一些测试。

要获取对已加载模块的引用,请使用:

PyImport_AddModule("module_name");

为了获取对全局定义变量的引用,导入主模块并按名称获取引用:

PyObject *mainModule = PyImport_AddModule("__main__");
PyObject *var = PyObject_GetAttrString(mainModule, "var_name");

如果变量是在不同的模块/脚本中定义的,那么它将只在该模块中可见(不是全局的)。 因此,您必须将“ma​​in”更改为该特定模块的名称。

关于python - 是否可以从现有变量的名称中获取 PyObject 引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40222680/

相关文章:

python - 入队调用中的 rq 超时参数不起作用,给出 JobTimeoutException

python - 如何在 Python 的集合列表中找到并集?

python - 具有非平行外线的立体图像的 OpenCV 深度图

python-2.7 - Chrome 驱动程序需要在 Mac 上的路径错误中可用

python - 如何从python中的文件中读取多个词典?

python - 如何将 Python 双端队列转换为 C++ 容器?

python - 只读 python 属性?无法打印对象

class - 将特定的东西分配给 Python 中的类

python - PyObject_GetItem 和 PyObject_SetItem 是否适用于 PyType_List 和 PyType_Dict 类型?

python - NumPy C API 扩展导致内存使用过多