Python'da iterator protokoli
for sikli ro’yxat,
string va boshqa ketma-ketliklarni birma-bir aylanadi. Lekin u buni qanday
qiladi? Ortida iterator turadi. Bu darsda iterator mexanizmini ochamiz.
iter va next
Har aylansa bo’ladigan narsadan iter() bilan iterator olinadi, keyin
next() bilan elementlar birma-bir so’raladi:
next() har chaqirilganda keyingi elementni beradi. Elementlar tugagach,
StopIteration xatosi chiqadi — bu “tugadi” signali.
for sikli aslida nima qiladi
for sikli aynan shu jarayonni avtomatlashtiradi. Bu ikki kod bir xil
ishlaydi:
Ichkarida for iter() chaqiradi, next() bilan aylanadi va
StopIteration kelganda to’xtaydi — buni siz ko’rmaysiz.
O’z iteratoringiz
Klassga __iter__ va __next__ qo’shib, uni aylansa bo’ladigan qilish
mumkin:
Amaliy mashq
Iteratsiyani ichidan ko’ring:
- Ro’yxat yaratib,
iter()bilan iterator oling; next()ni bir necha marta chaqiring;- elementlar tugagach yana
next()chaqiring — qanday xato chiqadi? forsikli bilan xuddi shu ro’yxatni aylanib chiqing;__iter__va__next__metodlari bo’lgan o’z klassingizni yozing.
for sikli 3-qadamdagi xatoni qanday hal qiladi?
Qisqacha xulosa
- Iterator — elementlarni birma-bir beradigan obyekt.
iter()iteratorni oladi,next()keyingi elementni beradi.- Elementlar tugaganda
StopIterationchiqadi. forsikli aslidaiter()+next()ni avtomatlashtiradi.- Iterator protokoli —
__iter__va__next__metodlari; generator uni soddalashtiradi.
Keyingi darslarda kontekst menejer, tip izohlari va asinxron dasturlashni ko’ramiz.