迭代器協議?
迭代器有兩個函數。
-
PyObject*
PyIter_Next(PyObject?*o)? - Return value: New reference.
返回迭代 o 的下一個值。 對象必須是一個迭代器(這應由調用者來判斷)。 如果沒有余下的值,則返回
NULL并且不設置異常。 如果在獲取條目時發生了錯誤,則返回NULL并且傳遞異常。
要為迭代器編寫一個一個循環,C代碼應該看起來像這樣
PyObject *iterator = PyObject_GetIter(obj);
PyObject *item;
if (iterator == NULL) {
/* propagate error */
}
while ((item = PyIter_Next(iterator))) {
/* do something with item */
...
/* release reference when done */
Py_DECREF(item);
}
Py_DECREF(iterator);
if (PyErr_Occurred()) {
/* propagate error */
}
else {
/* continue doing useful work */
}
