পাইথন ইটারেটর

পাইথন ইটারেটর

ইটারেটর হচ্ছে একটি অবজেক্ট, যা মানগুলোর সংখ্যা নির্দেশ করে。

ইটারেটর হচ্ছে ইটারেবল অবজেক্ট, যার মানে আপনি সকল মানকে পরিদর্শন করতে পারেন。

প্রযুক্তিগতভাবে, পাইথনে, ইটারেটর হচ্ছে ইটারেটর প্রোটোকল রূপায়নকারী অবজেক্ট, যা __iter__() এবং __next__()

ইটারেটর VS ইটারেবল (Iterable)

তালিকা, ট্যুপল, ডিকশনারি এবং সেটসগুলিই ইটারেবল অবজেক্ট, এবং এগুলিকে ইটারেটর (Iterator) হিসাবে ব্যবহার করা যায়。

মথড সকল এই অবজেক্টগুলিতেই ইটারেটর পাওয়ার জন্য iter()

ইনস্ট্যান্স

মথড:

mytuple = ("apple", "banana", "cherry")
ট্যুপল থেকে একটি ইটারেটর ফিরিয়ে দিয়ে, এবং প্রত্যেক মানকে প্রিন্ট করুন:
print(next(myit))
print(next(myit))
print(next(myit))

ইনস্ট্যান্স চালু করুন

myit = iter(mytuple)

ইনস্ট্যান্স

স্ট্রিংও একটি ইটারেবল অবজেক্ট, এবং এটি ইটারেটর ফিরিয়ে দিতে পারে:

mystr = "banana"
myit = iter(mystr)
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))

ইনস্ট্যান্স চালু করুন

ইটারেটর পরিদর্শন

আমরা আবার ফর সার্কুলেশনকে ব্যবহার করে একটি ইটারেবল অবজেক্ট পরিদর্শন করতে পারি:

ইনস্ট্যান্স

ইটারেশন ট্যুপলের মানগুলোতে:

mytuple = ("apple", "banana", "cherry")
for x in mytuple:
  print(x)

ইনস্ট্যান্স চালু করুন

ইনস্ট্যান্স

ইটারেশন স্ট্রিংকীর অক্ষরগুলোতে:

mystr = "banana"
for x in mystr:
  print(x)

ইনস্ট্যান্স চালু করুন

তুলনা করুন:for সার্কুলেশন একটি ইটারেটর অবজেক্ট তৈরি করে, এবং প্রত্যেক সার্কুলেশন করার সময় next() মথড

ইটারেটর তৈরি করুন

যদি আপনি অবজেক্ট/ক্লাসকে ইটারেটর হিসাবে তৈরি করতে চান, তবে অবজেক্টকে __iter__() এবং __next__() মথড

যেমন আপনি পাইথন ক্লাস/অবজেক্ট এবংটি চাপটি পড়েছেন, সকল ক্লাসগুলিতেই নামকরা __init__() ফাংশন, যা আপনি অবজেক্ট তৈরি করার সময় কিছু প্রাথমিক প্রস্তুতি করতে পারেন。

__iter__() পদ্ধতির কাজ একই, আপনি কাজ করতে পারেন (প্রথম হলেও থাকতে পারে), কিন্তু সবসময় ইটারেশন অবজেক্টটি ফিরিয়ে দিতে হবে。

__next__() পদ্ধতিও আপনাকে কাজ করার অনুমতি দেয়, এবং অবশ্যই সিরিজের পরবর্তী বিষয়টি ফিরিয়ে দিতে হবে。

ইনস্ট্যান্স

একটি সংখ্যা যুক্ত করে একটি ইটারেশন করা হয়, 1 থেকে শুরু করে, প্রত্যেক ক্রমাগত ক্রম বৃদ্ধি করে (1, 2, 3, 4, 5 ইত্যাদি ফিরতে থাকে):

class MyNumbers:
  def __iter__(self):
    self.a = 1
    return self
  def __next__(self):
    x = self.a
    self.a += 1
    return x
myclass = MyNumbers()
myiter = iter(myclass)
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))

ইনস্ট্যান্স চালু করুন

StopIteration

আপনার যদি পর্যাপ্ত next() বাক্যে ব্যবহার করতে পারি, বা for-সাইকলে ব্যবহার করলে, তবে উপরোক্ত উদাহরণ অবশ্যই চলতে থাকবে。

ইটারেশন অবশ্যই সমাপ্ত করার জন্য, আমরা StopIteration বাক্যে。

একটি __next__() পদ্ধতিতে, যদি ইটারেশন নির্দিষ্ট সংখ্যক থাকে, তবে আমরা একটি সমাপ্তি শর্ত যোগ করতে পারি যাতে ত্রুটি ফেলা হয়:

ইনস্ট্যান্স

20টি ইটারেশনের পর স্থগিত করুন:

class MyNumbers:
  def __iter__(self):
    self.a = 1
    return self
  def __next__(self):
    if self.a <= 20:
      x = self.a
      self.a += 1
      return x
    else:
      raise StopIteration
myclass = MyNumbers()
myiter = iter(myclass)
for x in myiter:
  print(x)

ইনস্ট্যান্স চালু করুন