Iterator va generator

bekzod_khudayberdiev

Bekzod

Posted on January 25, 2023

Iterator va generator

Iterator

Python da iterator obyektlar __iter__ va __next__ metodlari orqali amalga oshiriladi. Iterator obyektni iterable tiplar list, tuple, dict, str va boshqa, iter() built_in metodi orqali yaratamiz va elementlarni olishda next() metodidan foydalanamiz.
iterator
Manba: Codingninjas

my_list = [2, 4, 8, 16, 32]

iterator = iter(my_list)

print(next(iterator))  # 2
print(next(iterator))  # 4
print(next(iterator))  # 8
print(next(iterator))  # 16
print(next(iterator))  # 32
print(next(iterator))  # StopIteration
Enter fullscreen mode Exit fullscreen mode

Iterator oxirgi elementidan keyin next ishlatilsa StopIteration xatolik qaytaradi.

Xuddi shuni for loop orqali amalga oshiramiz.

my_list = [2, 4, 8, 16, 32]

for item in my_list:
    print(item)

# 2
# 4
# 8
# 16
# 32
Enter fullscreen mode Exit fullscreen mode

Iterator obyekt elementlarini for loop orqali ham olishimiz mumkin.

my_list = [2, 4, 8, 16, 32]

iterator = iter(my_list)

for item in iterator:
    print(item)

# 2
# 4
# 8
# 16
# 32
Enter fullscreen mode Exit fullscreen mode

__iter__ va __next__ metodlarni o'zgartirgan holda iterator obyekt yaratamiz.

class PowTwo:
    def __init__(self, limit=0):
        self.limit = limit

    def __iter__(self):
        self.n = 1
        return self

    def __next__(self):
        if self.n <= self.limit:
            pow_number = 2 ** self.n
            self.n += 1
            return pow_number
        else:
            raise StopIteration


numbers = PowTwo(5)
iterator = iter(numbers)

print(next(iterator))  # 2
print(next(iterator))  # 4
print(next(iterator))  # 8
print(next(iterator))  # 16
print(next(iterator))  # 32
print(next(iterator))  # StopIteration
Enter fullscreen mode Exit fullscreen mode

iter() va next() built_in metodlar ishlatganimizda class da yozilgan __iter__ va __next__ metodlarga murojaat qilinadi.

numbers = PowTwo(5)
iterator = numbers.__iter__()

print(iterator.__next__())  # 2
print(iterator.__next__())  # 4
print(iterator.__next__())  # 8
print(iterator.__next__())  # 16
print(iterator.__next__())  # 32
print(iterator.__next__())  # StopIteration
Enter fullscreen mode Exit fullscreen mode

Generator

generatorManba: Medium

Python da generator funksiya oddiy funksiyadek bo'ladi, faqat yield kalit so'zi orqali qiymat qaytariladi.

def generator():
    yield 1
    yield 2
    yield 3


for value in generator():
    print(value)
# 1
# 2
# 3
Enter fullscreen mode Exit fullscreen mode

Generator funksiya generator obyekt qaytaradi.

print(generator())
# <generator object generator at 0x7f1af486aea0>
Enter fullscreen mode Exit fullscreen mode

Generator obyekt dan iterator sifatida foydalanib next() orqali ham qiymatlarni olishimiz mumkin.

my_generator = generator()

print(next(my_generator))  # 1
print(next(my_generator))  # 2
print(next(my_generator))  # 3
print(next(my_generator))  # StopIteration
Enter fullscreen mode Exit fullscreen mode

Nima uchun funksiyada return o'rniga yield ishlatilyapti?

return funksiyada berilgan qiymatni qaytaradi, yield esa ketma-ketlikni qaytarib yuboradi. Biz funksiyada butun bir ketma-ketlik xotirada saqlamasdan qaytarmoqchi bo'lsak yield foydalanishimiz kerak.

Raqamlar ro'yxatidan ularning kvadratlarini qaytaradigan generator funksiya yaratib ko'ramiz.

def square(nums):
    for num in nums:
        yield num ** 2


numbers = [1, 2, 3]
generator = square(numbers)

print(next(generator))  # 1
print(next(generator))  # 4
print(next(generator))  # 9
print(next(generator))  # StopIteration
Enter fullscreen mode Exit fullscreen mode

Generator funksiya orqali qaytariladigan ketma-ketlikni sum() va boshqa iterable qabul qiladigan funksiyalar orqali ishlatsak ham bo'ladi.

numbers = [1, 2, 3]
sum_of_square_numbers = sum(square(numbers))
print(sum_of_square_numbers)  # 14
Enter fullscreen mode Exit fullscreen mode
💖 💪 🙅 🚩
bekzod_khudayberdiev
Bekzod

Posted on January 25, 2023

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related

Iterator va generator
python Iterator va generator

January 25, 2023

Python da decorator
python Python da decorator

January 25, 2023