پروتکل پیمایش‌گر

دو تابع به‌طور خاص برای کار با پیمایش‌گرها وجود دارند.

int PyIter_Check(PyObject *o)
Part of the Stable ABI since version 3.8.

اگر شیء o بتواند به‌طور ایمن به PyIter_NextItem() پاس داده شود، مقدار غیرصفر و در غیر این صورت 0 برگردانده می‌شود. این تابع همیشه با موفقیت انجام می‌شود.

int PyAIter_Check(PyObject *o)
Part of the Stable ABI since version 3.10.

اگر شیء o پروتکل AsyncIterator را فراهم کند، مقدار غیر صفر برمی‌گرداند و در غیر این صورت 0. این تابع همیشه موفق می‌شود.

اضافه شده در نسخه‌ی 3.10.

int PyIter_NextItem(PyObject *iter, PyObject **item)
Part of the Stable ABI since version 3.14.

در صورت موفقیت، مقدار 1 را برمی‌گرداند و item را برابر یک ارجاع قوی به مقدار بعدی پیمایش‌گر iter قرار می‌دهد. اگر هیچ مقدار باقی‌مانده‌ای وجود نداشته باشد، مقدار 0 را برمی‌گرداند و item را برابر NULL قرار می‌دهد. در صورت خطا، مقدار -1 را برمی‌گرداند، item را برابر NULL قرار می‌دهد و یک استثنا تنظیم می‌کند.

اضافه شده در نسخه‌ی 3.14.

PyObject *PyIter_Next(PyObject *o)
Return value: New reference. Part of the Stable ABI.

این نسخه‌ای قدیمی‌تر از PyIter_NextItem() است که برای سازگاری با نسخه‌های قبلی نگه داشته شده است. استفاده از PyIter_NextItem() را ترجیح دهید.

مقدار بعدی را از پیمایش‌گر o برمی‌گرداند. شیء باید طبق PyIter_Check() یک پیمایش‌گر باشد (بررسی این مورد بر عهده‌ی فراخوان‌کننده است). اگر مقدار باقی‌مانده‌ای وجود نداشته باشد، NULL را بدون تنظیم هیچ استثنایی برمی‌گرداند. اگر هنگام بازیابی آیتم خطایی رخ دهد، NULL را برمی‌گرداند و استثنا را منتقل می‌کند.

type PySendResult

مقدار enum که برای نمایش نتایج مختلف تابع PyIter_Send() استفاده می‌شود.

اضافه شده در نسخه‌ی 3.10.

PySendResult PyIter_Send(PyObject *iter, PyObject *arg, PyObject **presult)
Part of the Stable ABI since version 3.10.

مقدار arg را به پیمایش‌گر iter ارسال می‌کند. بازگشت:

  • PYGEN_RETURN اگر پیمایش‌گر بازگشت کند. مقدار بازگشتی از طریق presult بازگردانده می‌شود.

  • PYGEN_NEXT اگر پیمایش‌گر مقداری تولید کند. مقدار تولیدشده از طریق presult بازگردانده می‌شود.

  • PYGEN_ERROR اگر پیمایش‌گر استثنایی مطرح کرده باشد. presult برابر NULL قرار می‌گیرد.

اضافه شده در نسخه‌ی 3.10.