Python Iterators
একটি পুনরাবৃত্তিকারী এমন একটি বস্তু যার একটি গণনাযোগ্য সংখ্যক মান রয়েছে।
একটি পুনরাবৃত্তিযোগ্য একটি বস্তু যা পুনরাবৃত্তিযোগ্য, যার অর্থ আপনি সমস্ত মানগুলির উপর পুনরাবৃত্তি করতে পারেন।
প্রযুক্তিগতভাবে, পাইথনে, একটি ইটারেটর একটি বস্তু যা ইটারেটর প্রোটোকল প্রয়োগ করে, যা__iter__()এবং__next__()পদ্ধতি ধারণ করে।
প্রতিক্রিয়াশীল বনাম প্রতিক্রিয়াশীল
তালিকা, tuples, অভিধান, এবং সেট সব recursive বস্তু. এগুলি হল পুনঃব্যবহারযোগ্য পাত্র যেখান থেকে আপনি পুনঃব্যবহারযোগ্য পেতে পারেন।
এই সব বস্তুর জন্যiter()পদ্ধতি বিদ্যমান, যা রিঅ্যাক্টিভেটর পেতে ব্যবহৃত হয়:
উদাহরণ
একটি টিপল থেকে পুনরাবৃত্তিকারী ফিরিয়ে দিন এবং প্রতিটি মান মুদ্রণ করুন:
mytuple = ("apple", "banana", "cherry")
myit = iter(mytuple)
print(next(myit))
print(next(myit))
print(next(myit))
স্ট্রিংগুলিও পুনরাবৃত্তিযোগ্য বস্তু, এবং একটি পুনরাবৃত্তিকারী ফিরিয়ে দিতে পারে:
উদাহরণ
স্ট্রিংগুলিও পুনরাবৃত্তিমূলক বস্তু যা অক্ষরের ক্রম ধারণ করে:
mystr = "banana"
myit = iter(mystr)
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
দ্রষ্টব্য:
iter()ফাংশন একটি পুনরাবৃত্তিকারী তৈরি করে, এবংnext()ফাংশনটি পুনরাবৃত্তিকারী থেকে পরবর্তী মান পায়।
রিঅ্যাক্টিভেটরের মাধ্যমে সঞ্চালন
লুপের জন্য A একটি পুনরাবৃত্তিযোগ্য বস্তুর মাধ্যমে পুনরাবৃত্তি করতেও ব্যবহার করা যেতে পারে:
উদাহরণ
একটি টিপলের মানগুলির উপর পুনরাবৃত্তি করুন:
mytuple = ("apple", "banana", "cherry")
for x in mytuple:
print(x)
উদাহরণ
একটি স্ট্রিং এর অক্ষর উপর পুনরাবৃত্তি করুন:
mystr = "banana"
for x in mystr:
print(x)
জন্য লুপ আসলে একটি পুনরাবৃত্তি বস্তু এবং প্রতিটি লুপের জন্য তৈরি করে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()যদি বিবৃতি ধারণ করে বা এটি লুপে ব্যবহার করা হয় তাহলে চিরকাল চলতে থাকবে।
পুনঃসক্রিয়করণকে চিরতরে চলতে না দিতে,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)
গুরুত্বপূর্ণ:
রিঅ্যাক্টিভেটর তৈরি করা এড়িয়ে চলুন যা অবিরামভাবে পুনরায় সক্রিয় হয়। সর্বদাStopIterationএকটি ব্যতিক্রম সহ একটি ফলাফল শর্ত প্রদান করুন.
আরো উদাহরণ
উদাহরণ
একটি পুনরাবৃত্তিকারী যা বর্গ সংখ্যা প্রদান করে:
class Squares:
def __iter__(self):
self.n = 1
return self
def __next__(self):
if self.n <= 10:
result = self.n ** 2
self.n += 1
return result
else:
raise StopIteration
squares = Squares()
for num in squares:
print(num)
উদাহরণ
অক্ষরগুলির ক্রম সহ কাস্টম পুনরায় সক্রিয় করুন:
class Alphabet:
def __iter__(self):
self.letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
self.index = 0
return self
def __next__(self):
if self.index < len(self.letters):
letter = self.letters[self.index]
self.index += 1
return letter
else:
raise StopIteration
alphabet = Alphabet()
for letter in alphabet:
print(letter)