【发布时间】:2019-12-16 17:06:13
【问题描述】:
我正在尝试为我的 c 扩展正确获取 Py_INCREF 和 Py_DECREF。
在这样做的同时,我一直在为发电机的高价值而磕磕绊绊。我有什么
一直在做的是:
// Forgive me for leaving out the NULL checks
PyObject *get_generator = PyUnicode_InternFromString("get_generator");
PyObject *callback;
PyObject *seq;
PyObject *item;
callback = PyObject_CallMethodObjArgs(parent->state, get_generator, NULL);
seq = PyObject_GetIter(tmp);
Py_DECREF(callback);
while ((item = PyIter_Next(seq))) {
...
Code
...
Py_DECREF(item);
}
Py_DECREF(seq);
printf("!!!%zd\n", seq);
谁能解释一下。
【问题讨论】:
-
seq = PyObject_GetIter(tmp);- 你是说seq = PyObject_GetIter(callback);吗? -
printf("!!!%zd\n", seq);是什么?你认为这是在打印引用计数吗?这将打印指针值。无论如何,在那里打印引用计数可能是无效的,因为该对象很可能已被破坏 -
@DavidW 我的意思是
seq = PyObject_GetIter(callback);和printf("!!!%zd\n", seq);是我的一个愚蠢的错误。我的意思是写seq->ob_refcnt
标签: python python-3.x python-c-api refcounting