কম্পিউটার

পাইথন ইটারেটর:একটি গাইড

কিভাবে একটি পাইথন ইটারেটর তৈরি করবেন:একটি নির্দেশিকা

ইটারেটরগুলি পাইথনের সর্বত্র রয়েছে; এমনকি "পুনরাবৃত্ত" বা "পুনরাবৃত্তিযোগ্য" শব্দটি না শুনেও মৌলিক বিষয়গুলি শেখা কঠিন।

একটি পুনরাবৃত্তিকারী একটি বস্তু যা পুনরাবৃত্তি করা যেতে পারে। যদিও কিছু অন্তর্নির্মিত অবজেক্ট রয়েছে যার উপর আপনি পুনরাবৃত্তি করতে পারেন, আপনি নিজেরও সংজ্ঞায়িত করতে পারেন।

এই নির্দেশিকায়, আমরা পাইথন ইটারেটর সম্পর্কে কথা বলতে যাচ্ছি, তারা কীভাবে কাজ করে এবং আপনি কীভাবে আপনার কোডে তাদের ব্যবহার করতে পারেন। আমরা আমাদের নিজস্ব পুনরাবৃত্ত তৈরি করব যাতে আপনি তাদের মূল বৈশিষ্ট্যগুলি সম্পর্কে জানতে পারেন। এই গাইডের কোডটি Python 3.x ইনস্টলেশনের জন্য সামঞ্জস্যপূর্ণ।

চলুন শুরু করা যাক!

ইটারেটার কি?

Iterators হল বস্তু যার উপর আপনি পুনরাবৃত্তি করতে পারেন। একটি পুনরাবৃত্তিকারী সেই বস্তু থেকে ডেটা ফেরত দেবে, একটি সময়ে একটি আইটেম।

একটি ফর লুপের মাধ্যমে এটি চালানোর চেষ্টা করে আপনি একটি বস্তু পুনরাবৃত্তিযোগ্য কিনা তা পরীক্ষা করতে পারেন; আপনি যদি বস্তুর মাধ্যমে লুপ করতে পারেন, তাহলে এর অর্থ হল এটি পুনরাবৃত্তিযোগ্য। স্ট্রিং, তালিকা, টিপল এবং অভিধানগুলি বিল্ট-ইন ডেটা প্রকারের উদাহরণ যা পুনরাবৃত্তিযোগ্য বস্তু।

পাইথনে একটি পুনরাবৃত্তিকারী বস্তুর দুটি পদ্ধতি থাকতে হবে:

  • __iter__() :এটি আপনাকে একটি পুনরাবৃত্তিকারী পুনরুদ্ধার করতে দেয়৷
  • __next__() :এটি আপনাকে একটি পুনরাবৃত্তিকারীতে পরবর্তী মান পেতে অনুমতি দেয়।

__ আন্ডারস্কোরগুলি পুনরাবৃত্তিকারীগুলিতে ব্যবহৃত হয় কারণ তারা বিশেষ ফাংশন নির্দেশ করে। একটি পুনরাবৃত্তিকারী সংজ্ঞায়িত করতে, আপনাকে অবশ্যই এই দুটি বিশেষ ফাংশন ব্যবহার করতে হবে। একসাথে, তাদের বলা হয় পুনরাবৃত্তিকারী প্রোটোকল। এই পদ্ধতিগুলি সাধারণত "iter এবং পরবর্তী পদ্ধতি" হিসাবে উচ্চারিত হয়।

81% অংশগ্রহণকারী বলেছেন যে তারা বুটক্যাম্পে যোগ দেওয়ার পরে তাদের প্রযুক্তিগত কাজের সম্ভাবনা সম্পর্কে আরও আত্মবিশ্বাসী বোধ করেছেন। আজই একটি বুটক্যাম্পের সাথে মিলিত হন৷

গড় বুটক্যাম্প গ্র্যাড একটি বুটক্যাম্প শুরু করা থেকে শুরু করে তাদের প্রথম চাকরি খোঁজা পর্যন্ত ক্যারিয়ারের পরিবর্তনে ছয় মাসেরও কম সময় কাটিয়েছে।

কিভাবে একটি অসীম ইটারেটর তৈরি করবেন

আমরা মূল বিষয়গুলি দিয়ে শুরু করব:একটি অসীম পুনরাবৃত্তিকারী তৈরি করা। এটি পুনরাবৃত্তিকারীর সবচেয়ে সহজ প্রকার। এটি এত সহজ যে এটি চিরকাল চলতে থাকবে। আমরা টিউটোরিয়ালে পরে এটি ঠিক করব।

কেক নামক একটি ক্লাস সংজ্ঞায়িত করে শুরু করা যাক, যেটি হবে আমাদের পুনরাবৃত্তিকারী ক্লাস:

class Cakes:
	def __init__(self, value):
		self.value = value

আমরা একটি __init__ ঘোষণা করেছি পদ্ধতি যা আমাদের ক্লাসের একটি অবজেক্ট ইনস্ট্যান্ট হওয়ার সাথে সাথেই কার্যকর করা হবে। __init__ পদ্ধতিকে কনস্ট্রাক্টর বলা হয়। এই উদাহরণে, আমাদের __init__ পদ্ধতি একটি মান নিতে পারে:মান।

এর পরে, আমরা আমাদের পুনরাবৃত্তিকারী প্রোটোকল তৈরি করতে যাচ্ছি:

def __iter__(self):
	return self

def __next__(self):
	return self.value

__iter__ পদ্ধতি আমাদের পুনরাবৃত্তি বস্তু পুনরুদ্ধার করতে ব্যবহৃত হয়। __next__ পদ্ধতির সাহায্যে আমরা নির্দিষ্ট করা পুনরাবৃত্তিযোগ্য বস্তুর পরবর্তী মানটি পুনরুদ্ধার করতে পারি।

আমাদের কোড এখনও পর্যন্ত কাজ করে তা নিশ্চিত করুন। আমরা আমাদের ক্লাসের একটি বস্তুকে এভাবে সংজ্ঞায়িত করে এটি করব:

cake = Cakes(["Vanilla Sponge"])

এ পর্যন্ত সব ঠিকই! আপনি নিজের মনে হতে পারে:কেন এই কোড কিছু করছে না? কারণ আমাদের ক্লাস শুধুমাত্র একটি পুনরাবৃত্তিকারী ফাংশন প্রদান করে।

এটি কাজ করে কিনা তা পরীক্ষা করার জন্য আমাদের পুনরাবৃত্তিকারীর উপর পুনরাবৃত্তি করতে হবে। আমরা একটি ফর-ইন লুপ ব্যবহার করে তা করতে পারি:

for c in cake:
	print(c)

আমাদের কোড ফিরে আসে:

Vanilla Sponge
Vanilla Sponge
…

ভ্যানিলা স্পঞ্জের অভিশাপ! এটা শুধু কনসোলে মুদ্রিত হচ্ছে রাখা. কি হচ্ছে? আমরা সবেমাত্র আমাদের প্রথম পুনরাবৃত্তিকারী তৈরি করেছি। এটা খুবই সহজ, কিন্তু এটা কাজ করে।

পাইথনে ফর-ইন লুপ ব্যবহার করে ইটারেটর পরীক্ষা করা হচ্ছে

আমাদের পুনরাবৃত্তিকারীকে উপযোগী করার আগে, আসুন একটি ফর-ইন লুপের ধারণাটি সংশোধন করার জন্য কিছুক্ষণ সময় নিন। আমাদের শেষ উদাহরণে, আমরা আমাদের কোড পরীক্ষা করার জন্য একটি ফর-ইন লুপ লিখেছিলাম:

for c in cake:
	print(c)

একটি ফর-ইন লুপ যেভাবে কাজ করে তা হল এটি প্রথমে একটি __iter__() ব্যবহার করে একটি বস্তুর একটি পুনরাবৃত্তিকারী তৈরি করে পদ্ধতি একটি ফর-ইন লুপ তারপর __next__() কল করে যতক্ষণ না কোনো মান ফেরত না আসে।

আপনি একটি for-in ভাবতে পারেন একটি সাধারণ while হিসাবে লুপ করুন লুপ. যদিও এমন মান রয়েছে যা একটি পুনরাবৃত্তিকারী ফেরত দিতে পারে, একটি ফর-ইন লুপ সেই মানগুলি ফিরিয়ে দেবে।

একটি দরকারী ইটারেটর তৈরি করা

আমাদের শেষ পুনরাবৃত্তিকারী খুব দরকারী নয়। এটি শুধুমাত্র একই মান বারবার প্রিন্ট করে। যে বলে, এটি এখনও একটি পুনরাবৃত্তিকারী:এটি পুনরাবৃত্তিযোগ্য সমস্ত বস্তু পড়তে সক্ষম।

আমরা একটি ইটারেটর তৈরি করতে যাচ্ছি যেটি একটি পাইথন অ্যারেতে পুনরাবৃত্তি করে। এই অ্যারেতে কেকের একটি তালিকা রয়েছে।

আমাদের পুনরাবৃত্তিকারীকে অসীমভাবে পুনরাবৃত্তি করা থেকে বিরত রাখতে, আমরা আমাদের পুনরাবৃত্তিযোগ্য এর ভিতরে কতগুলি মান রয়েছে এবং আমাদের পুনরাবৃত্তিকারী কতবার কার্যকর করেছে তা ট্র্যাক করতে যাচ্ছি। এটি আমাদের পুনরাবৃত্তের সমস্ত আইটেমগুলির মাধ্যমে পুনরাবৃত্তি করার পরে এটিকে কার্যকর করা থেকে আমাদের পুনরাবৃত্তিকে থামাতে অনুমতি দেবে৷

একটি নতুন পাইথন ফাইল খুলুন এবং নিম্নলিখিত কোডে পেস্ট করুন:

class Cakes:
	def __init__(self, value):
		self.value = value
		self.max = len(value)
		self.count = 0

	def __iter__(self):
		return self

	def __next__(self):
		if self.count < self.max:
			to_return = self.value[self.count]
			self.count += 1
			return to_return
		else:
			raise StopIteration

এই পুনরাবৃত্ত আমাদের শেষ এক তুলনায় একটু বেশি জটিল. এজন্য আমরা প্রথমে একটি অসীম পুনরাবৃত্তিকারী তৈরি করেছি। এই পুনরাবৃত্তিকারীতে, আমরা তিনটি মান শুরু করেছি:

  • মান:যে আইটেমটির উপরে আমরা পুনরাবৃত্তি করতে চাই।
  • সর্বোচ্চ:আমাদের পুনরাবৃত্তিযোগ্য আইটেমের সংখ্যা।
  • গণনা:আমাদের পুনরাবৃত্তিকারী কতবার কার্যকর করেছে।

আমাদের __next__()-এ পদ্ধতি, আমরা একটি "if" বিবৃতি যোগ করেছি। এই বিবৃতিটি পরীক্ষা করে যে আমাদের পুনরাবৃত্তিকারীটি কতবার চালানো হয়েছে (গণনা) সেই আইটেমের সংখ্যার চেয়ে কম যা আমাদের পুনরাবৃত্তিযোগ্য পুনরাবৃত্তি করা উচিত (সর্বোচ্চ)।

যদি "গণনা" "সর্বোচ্চ" থেকে কম হয়, আমাদের পুনরাবৃত্তিকারী পুনরাবৃত্তিযোগ্য বস্তুর পরবর্তী মান খুঁজে পাবে। এটি তারপর আমাদের "গণনা" ভেরিয়েবলে 1 যোগ করবে যাতে আমরা পুনরাবৃত্তি করতে কতগুলি অবজেক্ট বাকি আছে তা ট্র্যাক করতে পারি। তারপর, আমরা যে মান গণনা করেছি তা ফেরত দিই।

এটি লক্ষ্য করা গুরুত্বপূর্ণ যে আমরা "গণনা" ভেরিয়েবল বৃদ্ধি করার আগে "to_return" ভেরিয়েবলের একটি মান নির্ধারণ করি। এটি নিশ্চিত করে যে আমরা আমাদের পুনরাবৃত্তিকারীর বর্তমান পুনরাবৃত্তিতে মানটি অ্যাক্সেস করতে পারি।

যদি আমরা আমাদের তালিকার প্রতিটি আইটেমের উপর পুনরাবৃত্তি করে থাকি, তাহলে StopIteration নামে একটি ব্যতিক্রম উত্থাপিত হবে। আমরা তালিকার প্রতিটি আইটেমের মাধ্যমে পুনরাবৃত্তি করার পরে এটি আমাদের প্রোগ্রামকে থামিয়ে দেয়।

দেখা যাক আমাদের পুনরাবৃত্তিকারী কাজ করে কিনা। আপনার প্রধান প্রোগ্রামে নিম্নলিখিত কোড যোগ করুন এবং এটি চালান:

cake = Cakes(["Vanilla Sponge"])
for c in cake:
	print(c)

আমাদের কোড ফিরে আসে:

Vanilla Sponge

আসুন আমাদের তালিকায় আরও কয়েকটি আইটেম যোগ করি এবং দেখুন কী হয়:

cake = Cakes(["Vanilla Sponge", "Carrot", "Coffee"])
for c in cake:
	print(c)

আমাদের কোড ফিরে আসে:

Vanilla Sponge
Carrot
Coffee

আমরা এটা করেছি! আমরা সফলভাবে একটি পুনরাবৃত্ত তৈরি করেছি যা আমাদের কেকের তালিকার মধ্য দিয়ে লুপ করে। আপনি একটি কেক প্রাপ্য – এমনকি শুধু একটি কাপকেক – এতদূর পাওয়ার জন্য।

উপসংহার

পুনরাবৃত্তিকারীরা আপনাকে এমন বস্তু তৈরি করতে দেয় যা পুনরাবৃত্তি করা যায়। একটি পুনরাবৃত্তিকারী একটি তালিকা, একটি স্ট্রিং বা অন্য পুনরাবৃত্তিযোগ্য বস্তুর মাধ্যমে লুপ করতে পারে এবং একটি নির্দিষ্ট ক্রিয়া সম্পাদন করতে পারে।

আপনি একটি চ্যালেঞ্জ জন্য আপ? একটি পুনরাবৃত্ত তৈরি করুন যা সংখ্যার একটি তালিকার মাধ্যমে লুপ করে এবং প্রতিটি সংখ্যাকে দুই দ্বারা গুণ করে ফেরত দেয়।

এই পুনরাবৃত্তিকারীর কোডটি আমাদের উপরের উদাহরণের অনুরূপ হবে - এটি এখনও পুনরাবৃত্তিকারী প্রোটোকল ব্যবহার করবে - তবে এটি মূল প্রোগ্রামে ফিরে আসার আগে একটি তালিকার প্রতিটি সংখ্যাকে দুই দ্বারা গুণ করতে হবে।

এখন আপনি একজন বিশেষজ্ঞের মতো Python-এ আপনার নিজস্ব পুনরাবৃত্তি লেখা শুরু করতে প্রস্তুত!


  1. পাইথন দোভাষী:একটি ধাপে ধাপে গাইড

  2. পাইথন খুঁজুন:একটি গাইড

  3. পাইথন অগ্রাধিকার সারি:একটি গাইড

  4. পাইথন অভিধানের মান:একটি গাইড