当我看到以下代码片段时,我正在阅读文件 methodobject.c,因为我正在尝试学习如何为 Python 制作 C 扩展:
PyObject *
PyCFunction_Call(PyObject *func, PyObject *arg, PyObject *kw)
{
PyCFunctionObject* f = (PyCFunctionObject*)func;
PyCFunction meth = PyCFunction_GET_FUNCTION(func);
PyObject *self = PyCFunction_GET_SELF(func);
Py_ssize_t size;
switch (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST)) {
case METH_VARARGS:
if (kw == NULL || PyDict_Size(kw) == 0)
return (*meth)(self, arg);
break;
我看的越多
return (*meth)(self, arg);
我越是意识到我不明白。我认为它返回了一个指向 meth 的指针,它是一个函数,它接受 self(一个本地声明的指针)和 arg(一个从外部传递到 PyCFunctionCall 的指针)。但是,因为在我看来 meth 和 self 好像是在堆栈上分配的,所以一旦 PyCFunctionCall 退出,它们将被释放,这将导致它们传递给的任何变量出现问题。
我在这里想念什么?