কম্পিউটার টিউটোরিয়াল

পাইথনে ইটেরেবল (Iterable) এবং ইটেরেটর (Iterator) এর পার্থক্য


একটি ইটেরেবল (iterable)কে লুকসা সংজ্ঞায়িত করা যায় এমন একটি অবজেক্ট হিসেবে যা ইন-বিল্ট মেথড iter()-এ পাস করলে একটি ইটেরেটর জেনারেট করে। একটি অবজেক্ট ইটেরেবল হওয়ার জন্য কয়েকটি শর্ত রয়েছে, ক্লাসের অবজেক্টকে দুটি ইনস্ট্যান্স মেথড ডিফাইন করতে হবে: __len__ এবং __getitem__। এই শর্তগুলো পূরণ করা একটি অবজেক্ট iter() মেথডে পাস করলে একটি ইটেরেটর জেনারেট করে।

নিচের উদাহরণ বুঝি ইটেরেবল বুঝতে:

string = "Tutorialspoint"
for char in string:
    print(char)

আউটপুট

T
u
t
o
r
i
a
l
s
p
o
i
n
t

উপরের কোড __getitem__(index) মেথড ব্যবহার করে যা index দ্বারা নির্দিষ্ট পজিশনের এলিমেন্ট রিটার্ন করে।

সো, আমাদের উপরের কোড -

  • ইনডেক্স ০ থেকে শুরু করুন
  • string.__getitem__(index) কল করুন
  • IndexError উত্থাপিত হলে? স্টপ করুন
  • লুপের বডি রান করুন
  • ইনডেক্স বাড়ান, ধাপ ২-তে ফিরে যান।

ইটেরেটর (Iterators)

ইটেরেটর ডিফাইন করা হয় এমন একটি অবজেক্ট হিসেবে যা একটি ইন্টারন্যাল স্টেট ভেরিয়েবল ব্যবহার করে ইটেরেশন গণনা করে। এই কেসে ভেরিয়েবলটি, শেষ আইটেম পার করার zaman শূন্য সেট করা হয় না, বরং StopIteration() উত্থাপিত হয় ইটেরেশন শেষ নির্দেশ করতে। এর মানে ইটারেট করা আইটেম শুধু একবার ইটেরেট করা যাবে, নিচের উদাহরণের মত:

my_list = ['itemOne', 'TutorialsPoints']
iterators_of_some_list = iter(my_list)
for i in iterators_of_some_list:
    print(i)
for j in iterators_of_some_list: # কাজ করবে না
    print(j)
# যাইহোক
for k in my_list:
    print(k)
for l in my_list: # কাজ করলো
    print(l)

আউটপুট

itemOne
TutorialsPoints
itemOne
TutorialsPoints
itemOne
TutorialsPoints

উপরের কোড সত্য কারণ iter() মেথড ইটেরেটরে নিজেই রিটার্ন করে (কারেন্ট স্টেট মনে রাখতে)। সো উপরে আমাদের একটি লুপ টাইপের ইমপ্লিমেন্টেশন আছে "for"-এর মত যা টার্মিনেট করতে পারে।


  1. জাভাস্ক্রিপ্ট এবং পাইথনে সেমিকোলনের পার্থক্য

  2. পাইথনের re.search এবং re.match-এর পার্থক্য

  3. পাইথনে raw_input() এবং input() ফাংশনের পার্থক্য

  4. পাইথনে স্ট্রিং এবং বাইট স্ট্রিং-এর পার্থক্য