从 C 导入标准 Python 库
Import standard Python library from C
我正在编写 Python 3 C extension,我想在其中使用 MappingProxyType (from types import MappingProxyType
)。根据我在 Cpython 源代码中看到的内容,MappingProxyType 是用 Python 而不是 C 编写的。
如何从 C 中使用这种类型?我想一定有类似 C 级的东西 "import" 然后我可以从名称中找到 PyObject(或者更确切地说,PyTypeObject)作为 C 字符串。
有一个 C API 用于导入模块。然后你只需要从模块中获取 MappingProxyType
type 属性:
static PyTypeObject *import_MappingProxyType(void) {
PyObject *m = PyImport_ImportModule("types");
if (!m) return NULL;
PyObject *t = PyObject_GetAttrString(m, "MappingProxyType");
Py_DECREF(m);
if (!t) return NULL;
if (PyType_Check(t))
return (PyTypeObject *) t;
Py_DECREF(t);
PyErr_SetString(PyExc_TypeError, "not the MappingProxyType type");
return NULL;
}
我正在编写 Python 3 C extension,我想在其中使用 MappingProxyType (from types import MappingProxyType
)。根据我在 Cpython 源代码中看到的内容,MappingProxyType 是用 Python 而不是 C 编写的。
如何从 C 中使用这种类型?我想一定有类似 C 级的东西 "import" 然后我可以从名称中找到 PyObject(或者更确切地说,PyTypeObject)作为 C 字符串。
有一个 C API 用于导入模块。然后你只需要从模块中获取 MappingProxyType
type 属性:
static PyTypeObject *import_MappingProxyType(void) {
PyObject *m = PyImport_ImportModule("types");
if (!m) return NULL;
PyObject *t = PyObject_GetAttrString(m, "MappingProxyType");
Py_DECREF(m);
if (!t) return NULL;
if (PyType_Check(t))
return (PyTypeObject *) t;
Py_DECREF(t);
PyErr_SetString(PyExc_TypeError, "not the MappingProxyType type");
return NULL;
}