হ্যাঁ, পাইথনে জেনারেটর ব্যবহার করে ইটারেটর তৈরি করা যায়। ইটারেটর তৈরি করা খুব সহজ: আমরা yield কীওয়ার্ড ব্যবহার করে একটি জেনারেটর ফাংশন লিখতে পারি।
পাইথন জেনারেটর ইটারেটর তৈরির একটি সহজ ও সরল পদ্ধতি। এটি মূলত একটি ফাংশন ঘোষণা করে যা ইটারেটর처럼 আচরণ করে।
জেনারেটর হল একটি ফাংশন যা একবারে এক মান প্রদান করে এবং তার ওপর ইটারেট করা যায়। দৈনন্দিন প্রোগ্রামিং-এ প্রায় প্রতিটি প্রোগ্রামার লিস্ট, স্ট্রিং, ডিকশনারি ইত্যাদি ইটারেবল অবজেক্ট ব্যবহার করে।
ইটারেটর হল এমন একটি অবজেক্ট যার ওপর লুপ চালিয়ে ইটারেট করা যায়।
নিচের উদাহরণে দেখানো হয়েছে যে জেনারেটর কীভাবে পাইথনে yield স্টেটমেন্ট ব্যবহার করে এবং এটি একটি মান রিটার্ন করার মতো কাজ করে।
উদাহরণ
def generator():
print("প্রোগ্রাম সফলভাবে চলছে")
yield 'x'
yield 'y'
yield 'z'
generator()
আউটপুট
<generator object generator at 0x000000CF81D07390>
for লুপ ব্যবহার করেও জেনারেটর থেকে মান পাওয়া যায়।
উদাহরণ
for i in generator():
print(i)
আউটপুট
প্রোগ্রাম সফলভাবে চলছে x y z
ইটারেটর অবজেক্ট দুটি পদ্ধতি সমর্থন করে: ১. __iter__ মেথড এবং ২. __next__ মেথড।
__iter__মেথডটি ইটারেটর অবজেক্টটিই রিটার্ন করে। এটি মূলতforলুপ এবংinস্টেটমেন্টে ব্যবহৃত হয়।__next__মেথডটি ইটারেটর থেকে পরবর্তী মান রিটার্ন করে। যদি আর কোনো আইটেম না থাকে তবেStopIterationএক্সেপশন উত্থাপন করা উচিত।
উদাহরণ
class TemperatureRange(object):
def __init__(self, low_temp, high_temp):
self.current = low_temp
self.high = high_temp
def __iter__(self):
'ইটারেটর অবজেক্ট হিসেবে নিজে কে রিটার্ন করে'
return self
def __next__(self):
'current high থেকে ছোট থাকা পর্যন্ত পরবর্তী মান রিটার্ন করে'
if self.current > self.high:
raise StopIteration
else:
self.current += 1
return self.current - 1
c = TemperatureRange(3, 20)
for i in c:
print(i, end=' ')
আউটপুট
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20