イテレータプロトコル (iterator protocol)¶
イテレータを扱うための固有の関数は二つあります。
-
int PyIter_Check(PyObject *o)¶
- 次に属します: Stable ABI (バージョン 3.8 より).
Return non-zero if the object o can be safely passed to
PyIter_Next(), and0otherwise. This function always succeeds.
-
int PyAIter_Check(PyObject *o)¶
- 次に属します: Stable ABI (バージョン 3.10 より).
オブジェクト o が
AsyncIteratorプロトコルを提供する場合はゼロ以外を、そうでなければ0を返します。 この関数は常に成功します。Added in version 3.10.
-
PyObject *PyIter_Next(PyObject *o)¶
- 戻り値: 新しい参照。 次に属します: Stable ABI.
イテレータ o から次の値を返します。 このオブジェクトは
PyIter_Check()で判定されるイテレータでなければなりません (確認は呼び出し側の責任です)。 残りの値がなければ、例外を設定せずにNULLを返します。 要素の取得中にエラーが起きると、NULLを返して例外を引き継ぎます。
To write a loop which iterates over an iterator, the C code should look something like this:
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 */
}
-
type PySendResult¶
PyIter_Send()の各種の結果を表す列挙値です。Added in version 3.10.
-
PySendResult PyIter_Send(PyObject *iter, PyObject *arg, PyObject **presult)¶
- 次に属します: Stable ABI (バージョン 3.10 より).
値 arg をイテレータ iter に送ります。 戻り値は次のとおりです:
イテレータが return した場合は
PYGEN_RETURN。 戻り値は presult を通じて返します。イテレータが yield した場合は
PYGEN_NEXT。 yield した値は presult を通じて返します。PYGEN_ERRORif iterator has raised and exception. presult is set toNULL.
Added in version 3.10.