Giao thức lặp

Có hai hàm đặc biệt để làm việc với các trình vòng lặp.

int PyIter_Check(PyObject *o)
Một phần của ABI ổn định kể từ phiên bản 3.8.

Trả về giá trị khác 0 nếu đối tượng o có thể được chuyển an toàn tới PyIter_NextItem()0 nếu không. Chức năng này luôn thành công.

int PyAIter_Check(PyObject *o)
Một phần của ABI ổn định kể từ phiên bản 3.10.

Trả về giá trị khác 0 nếu đối tượng o cung cấp giao thức AsyncIterator0 nếu ngược lại. Chức năng này luôn thành công.

Added in version 3.10.

int PyIter_NextItem(PyObject *iter, PyObject **item)
Một phần của ABI ổn định kể từ phiên bản 3.14.

Trả về 1 và đặt item thành strong reference của giá trị tiếp theo của iterator iter khi thành công. Trả về 0 và đặt item thành NULL nếu không còn giá trị nào. Trả về -1, đặt item thành NULL và đặt một ngoại lệ khi có lỗi.

Added in version 3.14.

PyObject *PyIter_Next(PyObject *o)
Giá trị trả về: Tham chiếu mới. Một phần của ABI ổn định.

Đây là phiên bản cũ hơn của PyIter_NextItem(), được giữ lại để tương thích ngược. Thích PyIter_NextItem() hơn.

Trả về giá trị tiếp theo từ iterator o. Đối tượng phải là một trình vòng lặp theo PyIter_Check() (người gọi có thể kiểm tra điều này). Nếu không còn giá trị nào, trả về NULL mà không đặt ngoại lệ. Nếu xảy ra lỗi trong khi truy xuất mục, trả về NULL và chuyển ngoại lệ.

type PySendResult

Giá trị enum được sử dụng để thể hiện các kết quả khác nhau của PyIter_Send().

Added in version 3.10.

PySendResult PyIter_Send(PyObject *iter, PyObject *arg, PyObject **presult)
Một phần của ABI ổn định kể từ phiên bản 3.10.

Gửi giá trị arg vào iterator iter. Trả về:

  • PYGEN_RETURN nếu iterator trả về. Giá trị trả về được trả về thông qua presult.

  • PYGEN_NEXT nếu iterator mang lại kết quả. Giá trị mang lại được trả về thông qua presult.

  • PYGEN_ERROR nếu iterator có ngoại lệ. presult được đặt thành NULL.

Added in version 3.10.