পাইথনে "পুনরাবৃত্ত", "পুনরাবৃত্তি" এবং "পুনরাবৃত্তি" এর সর্বাধিক প্রাথমিক সংজ্ঞাটি কী?
আমি একাধিক সংজ্ঞা পড়েছি কিন্তু সঠিক অর্থটি সনাক্ত করতে পারছি না কারণ এটি এখনও ডুবে না।
সাধারণ কেউ পদে 3 সংজ্ঞা দিয়ে আমাকে সাহায্য করতে পারেন?
পাইথনে "পুনরাবৃত্ত", "পুনরাবৃত্তি" এবং "পুনরাবৃত্তি" এর সর্বাধিক প্রাথমিক সংজ্ঞাটি কী?
আমি একাধিক সংজ্ঞা পড়েছি কিন্তু সঠিক অর্থটি সনাক্ত করতে পারছি না কারণ এটি এখনও ডুবে না।
সাধারণ কেউ পদে 3 সংজ্ঞা দিয়ে আমাকে সাহায্য করতে পারেন?
উত্তর:
একের পর এক প্রতিটি আইটেম গ্রহণের জন্য ইস্ট্রেশন একটি সাধারণ শব্দ। যে কোনও সময় আপনি কোনও লুপ ব্যবহার করেন, স্পষ্ট বা অন্তর্নিহিত, একাধিক আইটেমের উপরে যেতে, এটি পুনরাবৃত্তি।
পাইথন সালে iterable এবং পুনরুক্তিকারীর নির্দিষ্ট অর্থ আছে।
একটি iterable একটি বস্তু একটি রয়েছে __iter__
পদ্ধতি যা একটি ফেরৎ পুনরুক্তিকারীর , অথবা যা সংজ্ঞায়িত __getitem__
পদ্ধতি যা অনুক্রমিক ইনডেক্স শূন্য থেকে শুরু নিতে পারেন (এবং একটি উত্থাপন IndexError
যখন ইনডেক্স আর কার্যকর নয় সেগুলি)। একটি সুতরাং iterable একটি বস্তু যে আপনি একটি পেতে পারেন পুনরুক্তিকারীর থেকে।
একটি পুনরাবৃত্তি একটি next
(পাইথন 2) বা __next__
(পাইথন 3) পদ্ধতিযুক্ত একটি বস্তু ।
যখনই আপনি ব্যবহার for
লুপ, অথবা map
, অথবা একটি তালিকা ধী, ইত্যাদি পাইথন এ, next
পদ্ধতি স্বয়ংক্রিয়ভাবে বলা হয় থেকে প্রতিটি আইটেমের পেতে পুনরুক্তিকারীর , এইভাবে প্রক্রিয়া মাধ্যমে চালু পুনরাবৃত্তির ।
একটি ভাল জায়গা শেখার হবে শুরু করার টিউটোরিয়ালের iterators অধ্যায় এবং পুনরুক্তিকারীর ধরনের মান ধরনের পৃষ্ঠার অধ্যায় । আপনি বেসিকগুলি বোঝার পরে, ফাংশনাল প্রোগ্রামিং হাওটোটির পুনরাবৃত্তি বিভাগটি ব্যবহার করে দেখুন ।
__len__
পুনরাবৃত্তির সাথে আবশ্যকভাবে আবদ্ধ থাকবেন ? কীভাবে কোনও কিছুর দৈর্ঘ্য জানলে আপনি এটির পুনরাবৃত্তি করতে সহায়তা করবেন?
__getitem__
।
{'a': 'hi', 'b': 'bye'}
এর দৈর্ঘ্য 2
__iter__
পদ্ধতি আছে। আমি মনে করি যে জেএলএইচ নির্দিষ্টভাবে পুনরাবৃত্তিযোগ্য এমন বস্তুর উল্লেখ করছে কারণ তারা নির্ধারণ করে: "এমন একটি __getitem__
পদ্ধতি যা শূন্য থেকে শুরু করে অনুক্রমিক সূচকগুলি নিতে পারে"।
পাইথন ক্লাস শেখানোর ক্ষেত্রে আমি এখানে ব্যাখ্যাটি ব্যবহার করি:
একটি অপরিহার্য হ'ল:
for x in iterable: ...
বাiter()
যে কোনও কল করতে পারেন কোনও আইট্রেটর ফিরিয়ে দেবে: iter(obj)
বা__iter__
যে একটি তাজা আইটিরিওরটি দেয় বা এটির সূচকযুক্ত __getitem__
অনুসন্ধানের জন্য উপযুক্ত কোনও পদ্ধতি থাকতে পারে ।একজন আইটিইটিউটার হ'ল একটি বস্তু:
__next__
পদ্ধতিতে যে:
StopIteration
__iter__
যে পদ্ধতিটি ফিরে আসে self
)।মন্তব্য:
__next__
পাইথন 3 পদ্ধতি বানান করা হয় next
পাইথন 2, এবংnext()
সেই পদ্ধতিটিকে কল করে দেওয়া বস্তুটিতে কল করে।উদাহরণ স্বরূপ:
>>> s = 'cat' # s is an ITERABLE
# s is a str object that is immutable
# s has no state
# s has a __getitem__() method
>>> t = iter(s) # t is an ITERATOR
# t has state (it starts by pointing at the "c"
# t has a next() method and an __iter__() method
>>> next(t) # the next() function returns the next value and advances the state
'c'
>>> next(t) # the next() function returns the next value and advances
'a'
>>> next(t) # the next() function returns the next value and advances
't'
>>> next(t) # next() raises StopIteration to signal that iteration is complete
Traceback (most recent call last):
...
StopIteration
>>> iter(t) is t # the iterator is self-iterable
for
লুপগুলি সম্পর্কে , এবং 1 ম বুলেটটি "লুপিং ওভার" সম্পর্কে। আপনি কি দয়া করে এগুলি সম্বোধন করতে পারেন?
iter()
" আপনি যেতে পারেন "এর সাথে " কল করতে পারেন এমন কোনও কিছু iter()
"
উপরের উত্তরগুলি দুর্দান্ত, তবে আমি যা দেখেছি তার বেশিরভাগ হিসাবে আমার মতো লোকের পক্ষে যথেষ্ট পার্থক্যকে চাপ দেবেন না।
এছাড়াও, "X একটি __foo__()
পদ্ধতি যা পদ্ধতিতে আছে" এর মতো সংজ্ঞা রেখে "খুব পাইথোনিক" পাওয়ার প্রবণতা লোকেদের থাকে । এই জাতীয় সংজ্ঞাগুলি সঠিক - এগুলি হাঁসের-টাইপিং দর্শনের উপর ভিত্তি করে, তবে ধারণাগুলিটিকে তার সরলতার সাথে বোঝার চেষ্টা করার সময় পদ্ধতির উপর দৃষ্টি নিবদ্ধ করা হয়।
সুতরাং আমি আমার সংস্করণ যোগ করুন।
প্রাকৃতিক ভাষায়,
পাইথনে,
পুনরাবৃত্তিযোগ্য এমন একটি বস্তু যা ভাল, পুনরাবৃত্তিযোগ্য, যা সহজভাবে বলা হয়, এর অর্থ এটি পুনরাবৃত্তিতে যেমন for
লুপের সাহায্যে ব্যবহার করা যায় । কিভাবে? পুনরুক্তি ব্যবহার করে । আমি নীচে ব্যাখ্যা করব।
... যখন পুনরুক্তিকারীর একটি বস্তু সংজ্ঞায়িত যে কিভাবে আসলে কি পুনরাবৃত্তির - বিশেষভাবে পরবর্তী কি উপাদান। এজন্য এর অবশ্যই next()
পদ্ধতি থাকতে হবে
।
Iterators নিজেদের এছাড়াও iterable, পার্থক্য যে তাদের সঙ্গে আছে __iter__()
পদ্ধতি ফেরৎ একই বস্তু ( self
), হোক বা না হোক তার আইটেম পূর্ববর্তী কল খায় হয়েছে নির্বিশেষে next()
।
সুতরাং পাইথন দোভাষী যখন এটি for x in obj:
বিবৃতি দেখেন তখন কী মনে করেন ?
দেখুন, একটি
for
লুপ। একটি পুনরাবৃত্তিকারীর জন্য কাজের মতো দেখে মনে হচ্ছে ... আসুন একটি পাই। ... এই আছেobj
লোকটি আছে, সুতরাং তাকে জিজ্ঞাসা করুন।"মিঃ
obj
, আপনার কি আপনার পুনরাবৃত্তি আছে?" (... কলগুলিiter(obj)
, যা কল করেobj.__iter__()
, যা আনন্দের সাথে একটি চকচকে নতুন পুনরুক্তি প্রদান করে_i
))ঠিক আছে, এটা সহজ ছিল ... এর পরে পুনরাবৃত্তি শুরু করা যাক। (
x = _i.next()
...x = _i.next()
...)
মিঃ যেহেতু obj
এই পরীক্ষায় সাফল্য পেয়েছেন (কোনও বৈধ পুনরাবৃত্তকারীকে ফিরিয়ে দেওয়ার নির্দিষ্ট পদ্ধতি দ্বারা), আমরা তাকে বিশেষণ দিয়ে পুরস্কৃত করি: আপনি এখন তাকে "পুনরাবৃত্ত মিঃ obj
" বলতে পারেন।
তবে, সাধারণ ক্ষেত্রে, আপনি সাধারণত পৃথক পৃথক এবং পুনরাবৃত্তিযোগ্য হওয়া থেকে উপকার পাবেন না। সুতরাং আপনি কেবলমাত্র একটি অবজেক্টের সংজ্ঞা দিন যা এটির নিজস্ব পুনরাবৃত্তকারীও। (পাইথন সত্যিই যত্ন করে না যে এটি _i
হস্তান্তরিত obj
সমস্ত চকচকে নয়, কেবল obj
নিজেই ছিল))
এ কারণেই বেশিরভাগ উদাহরণগুলিতে আমি দেখেছি (এবং যা আমাকে বার বার বিভ্রান্ত করে তুলেছিল), আপনি দেখতে পারেন:
class IterableExample(object):
def __iter__(self):
return self
def next(self):
pass
পরিবর্তে
class Iterator(object):
def next(self):
pass
class Iterable(object):
def __iter__(self):
return Iterator()
যদিও এমন কিছু ক্ষেত্রে রয়েছে যখন আপনি পুনরাবৃত্তকারী থেকে পৃথক পৃথকীকরণের মাধ্যমে উপকার করতে পারেন, যেমন আপনি যখন এক সারি আইটেম রাখতে চান তবে আরও "কার্সার" থাকে। উদাহরণস্বরূপ আপনি যখন "বর্তমান" এবং "আগত" উপাদানগুলির সাথে কাজ করতে চান, আপনার উভয়ের জন্য পৃথক পুনরাবৃত্তি থাকতে পারে। বা একটি বিশাল তালিকা থেকে টানা একাধিক থ্রেড: সমস্ত আইটেমের উপর দিয়ে যাওয়ার জন্য প্রত্যেকের নিজস্ব ইউটরেটর থাকতে পারে। দেখুন রেমন্ড এর @ এবং @ glglgl এর উপরে উত্তর।
আপনি কী করতে পারেন তা কল্পনা করুন:
class SmartIterableExample(object):
def create_iterator(self):
# An amazingly powerful yet simple way to create arbitrary
# iterator, utilizing object state (or not, if you are fan
# of functional), magic and nuclear waste--no kittens hurt.
pass # don't forget to add the next() method
def __iter__(self):
return self.create_iterator()
মন্তব্য:
আমি আবার পুনরাবৃত্তি করব: পুনরাবৃত্তি পুনরাবৃত্তিযোগ্য নয় । লুপগুলিতে ইলেটরটিকে "উত্স" হিসাবে ব্যবহার করা যায় না for
। কি for
লুপ প্রাথমিকভাবে প্রয়োজন __iter__()
(সঙ্গে যে আয় কিছু next()
)।
অবশ্যই, for
কেবলমাত্র পুনরাবৃত্তির লুপ নয়, সুতরাং উপরের কিছু অন্যান্য কন্সট্রাক্টসের ক্ষেত্রেও প্রযোজ্য ( while
...)।
ইটারেটরগুলি next()
পুনরাবৃত্তি থামাতে স্টপআইটারেশন ছুড়ে দিতে পারে। এটি করার দরকার নেই, যদিও এটি চিরতরে পুনরাবৃত্তি করতে পারে বা অন্য উপায়গুলি ব্যবহার করতে পারে।
উপরের "চিন্তার প্রক্রিয়া" তে _i
আসলে উপস্থিত নেই really আমি নামটি তৈরি করেছি।
পাইথন ৩.x এর একটি ছোট পরিবর্তন আছে: next()
পদ্ধতি (বিল্ট-ইন নয়) এখনই ডাকতে হবে __next__()
। হ্যাঁ, এটি পাশাপাশি হওয়া উচিত ছিল।
আপনি এটি এর মতোও ভাবতে পারেন: পুনরাবৃত্তকারীগুলির ডেটা থাকে, পুনরাবৃত্তকারী পরবর্তী আইটেমটি টান দেয়
দাবি অস্বীকার: আমি কোনও পাইথন ইন্টারপ্রেটারের বিকাশকারী নই, তাই অনুবাদক "কী ভাবেন" আসলে আমি জানি না। উপরের চিত্রগুলি কেবলমাত্র পাইথনের নবাগত ব্যক্তির অন্যান্য ব্যাখ্যা, পরীক্ষা-নিরীক্ষা এবং বাস্তব জীবনের অভিজ্ঞতা থেকে আমি বিষয়টি কীভাবে বুঝতে পারি তার একমাত্র প্রদর্শন ration
for
লুপের জন্য একটি পুনরুক্তি প্রয়োজন ("দেখুন, লুপের জন্য একটি ite তবে তারপরে আপনি নোটগুলিতে শেষে বলবেন যে "ইল্ট্রেটারকে কোনও for
লুপের উত্স হিসাবে ব্যবহার করা যায় না " ...?
pass
এই next
সংজ্ঞাগুলির কোডে রেখেছেন ? আমি ধরে নিচ্ছি আপনি ঠিক বোঝাতে চাইছেন যে কাউকে পরেরটি পাওয়ার একটি উপায় বাস্তবায়ন করতে হবে, যেহেতু পরের দিকে কিছু ফিরিয়ে দিতে হবে।
pass
এটি ))
pass
, তখন মনে হয় সিনট্যাকটিক কারণে এটি রয়েছে। আমি মাত্র উপবৃত্তাকার অবজেক্টের উত্তরগুলি জুড়ে ছুটে এসেছি যা বেশ আকর্ষণীয়: আপনি ...
একটি "টুডো পরে" ব্লক নির্দেশ করতে ব্যবহার করতে পারেন । NotImplemented
পাওয়া যায়।
for
লুপে "উত্স" হিসাবে ইট্রেটর ব্যবহার করা যায় না । আমি আপনার উত্তরটির পয়েন্ট পেয়েছি এবং অন্যথায় এটি পছন্দ করি তবে আমি মনে করি এটি ঠিক করার মাধ্যমে এটি উপকৃত হবে।
একটি পুনরাবৃত্তযোগ্য একটি অবজেক্ট যা একটি __iter__()
পদ্ধতি আছে। এটি সম্ভবত list()
এস এবং tuple()
এস এর মতো বেশ কয়েকবার পুনরাবৃত্তি হতে পারে ।
একটি পুনরাবৃত্তি হ'ল বস্তু যা পুনরাবৃত্তি হয়। এটি কোনও __iter__()
পদ্ধতি দ্বারা ফিরে আসে, নিজস্ব __iter__()
পদ্ধতির মাধ্যমে নিজেই ফিরে আসে এবং একটি next()
পদ্ধতি রয়েছে ( __next__()
3.x এ)।
Iteration এই next()
শ্রদ্ধা কল করার প্রক্রিয়া । __next__()
যতক্ষণ না এটি উত্থাপিত হয় StopIteration
।
উদাহরণ:
>>> a = [1, 2, 3] # iterable
>>> b1 = iter(a) # iterator 1
>>> b2 = iter(a) # iterator 2, independent of b1
>>> next(b1)
1
>>> next(b1)
2
>>> next(b2) # start over, as it is the first call to b2
1
>>> next(b1)
3
>>> next(b1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>> b1 = iter(a) # new one, start over
>>> next(b1)
1
Iterable
।
Iterator
সর্বদা Iterable
এবং এর নিজস্ব হিসাবে Iterator
, দুটি কল iter()
অগত্যা দুটি স্বতন্ত্র Iterator
এস দেয় না।
এখানে আমার ঠকানো শীট:
sequence
+
|
v
def __getitem__(self, index: int):
+ ...
| raise IndexError
|
|
| def __iter__(self):
| + ...
| | return <iterator>
| |
| |
+--> or <-----+ def __next__(self):
+ | + ...
| | | raise StopIteration
v | |
iterable | |
+ | |
| | v
| +----> and +-------> iterator
| ^
v |
iter(<iterable>) +----------------------+
|
def generator(): |
+ yield 1 |
| generator_expression +-+
| |
+-> generator() +-> generator_iterator +-+
কুইজ: আপনি কি দেখছেন ...
__iter__()
পদ্ধতি একটি জেনারেটর হিসাবে প্রয়োগ করা যেতে পারে?__next__
পদ্ধতি রয়েছে যে একটি পুনরুক্তি করা আবশ্যক?উত্তর:
__iter__
পদ্ধতি থাকতে হবে । থাকার __iter__
একটি পুনরাবৃত্তযোগ্য হতে যথেষ্ট। সুতরাং প্রতিটি পুনরাবৃত্তি একটি পুনরাবৃত্তিযোগ্য।যখন __iter__
ডাকা হয় এটির পুনরুক্তি করা উচিত ( return <iterator>
উপরের চিত্রে)। একটি জেনারেটরকে কল করা একটি জেনারেটর পুনরুদ্ধারককে ফেরত দেয় যা এক ধরণের পুনরুক্তিকারী।
class Iterable1:
def __iter__(self):
# a method (which is a function defined inside a class body)
# calling iter() converts iterable (tuple) to iterator
return iter((1,2,3))
class Iterable2:
def __iter__(self):
# a generator
for i in (1, 2, 3):
yield i
class Iterable3:
def __iter__(self):
# with PEP 380 syntax
yield from (1, 2, 3)
# passes
assert list(Iterable1()) == list(Iterable2()) == list(Iterable3()) == [1, 2, 3]
এখানে একটি উদাহরণ:
class MyIterable:
def __init__(self):
self.n = 0
def __getitem__(self, index: int):
return (1, 2, 3)[index]
def __next__(self):
n = self.n = self.n + 1
if n > 3:
raise StopIteration
return n
# if you can iter it without raising a TypeError, then it's an iterable.
iter(MyIterable())
# but obviously `MyIterable()` is not an iterator since it does not have
# an `__iter__` method.
from collections.abc import Iterator
assert isinstance(MyIterable(), Iterator) # AssertionError
__iter__
পদ্ধতি রয়েছে বলে এটি পুনরাবৃত্ত হয় । আপনি দয়া করে এই উত্তরটি সম্পাদনা করে ২ য় এবং ৩ য় পয়েন্টগুলিতে বিশদভাবে বর্ণনা করতে পারেন
__iter__()
একটি পুনরাবৃত্তি প্রদান করে । একটি জেনারেটর একটি পুনরুক্তিকারী, তাই এটি এই উদ্দেশ্যে ব্যবহার করা যেতে পারে। পুনরায় 3: আমি কেবল এখানে অনুমান করতে পারি, তবে আমি মনে করি যে যদি __iter__()
অনুপস্থিত বা ফিরে না আসে তবে self
এটি কোনও পুনরুক্তিকারী নয়, কারণ একটি পুনরাবৃত্তিকে __iter__()
ফিরে আসতে হবে self
।
আমি জানি না এটি কারও সাহায্য করে কিনা তবে আমি সেগুলি আরও ভালভাবে বুঝতে আমার মাথায় ধারণাগুলি দেখতে সবসময় পছন্দ করি। আমার ছোট ছেলে হিসাবে আমি ইট এবং সাদা কাগজ দিয়ে পুনরাবৃত্ত / পুনরুক্তি ধারণাটি কল্পনা করতে পারি।
মনে করুন আমরা অন্ধকার ঘরে এবং মেঝেতে আমাদের ছেলের জন্য ইট লাগিয়েছি। বিভিন্ন আকারের, রঙের ইটগুলি এখন গুরুত্বপূর্ণ নয়। মনে করুন আমাদের মতো 5 টি ইট রয়েছে। এই 5 টি ইটকে একটি অবজেক্ট হিসাবে বর্ণনা করা যেতে পারে - এর ইট কিট বলি । আমরা এই ইটের কিট দিয়ে অনেকগুলি কাজ করতে পারি - একটি নিতে পারি এবং তারপরে দ্বিতীয় এবং তৃতীয়টি নিতে পারি, ইটের স্থান পরিবর্তন করতে পারে, দ্বিতীয়টির উপরে প্রথম ইট লাগাতে পারে। আমরা তাদের সাথে বিভিন্ন ধরণের জিনিস করতে পারি। সুতরাং প্রতিটি ইটের মধ্য দিয়ে যেতে এবং এটি দিয়ে কিছু করতে পারি তাই এই ইটের কিটটি একটি পুনরাবৃত্তিযোগ্য অবজেক্ট বা ক্রম । আমরা কেবলমাত্র আমার সামান্য পুত্র মত এটা করতে পারেন - আমরা সঙ্গে খেলা করতে পারেন এক ইট একটি সময়ে । তাই আবার আমি নিজেকে এই ব্রিকস কিটটি কল্পনা করিiterable ।
এখন মনে রাখবেন আমরা অন্ধকার ঘরে আছি। বা প্রায় অন্ধকার। বিষয়টি হ'ল আমরা সেই ইটগুলি পরিষ্কারভাবে দেখতে পাচ্ছি না, সেগুলি কী রঙ, কোন আকার ইত্যাদি So তাই আমরা যদি তাদের সাথে কিছু করতে চাই - উফ তাদের মাধ্যমে পুনরাবৃত্তি করি - তবে আমরা সত্যই জানি না কারণ এটি কী এবং কীভাবে অনেক অন্ধকার.
আমরা যা করতে পারি তা প্রথম ইটের কাছাকাছি - একটি ইটের কিটের উপাদান হিসাবে - আমরা প্রথম ইট-উপাদানটি কোথায় রয়েছে তা দেখতে আমাদের জন্য একটি সাদা ফ্লোরোসেন্ট কাগজ রেখে দিতে পারি। এবং প্রতিবার যখনই আমরা একটি কিট থেকে একটি ইট নিয়ে যাই, অন্ধকার ঘরে এটি দেখতে সক্ষম হবার জন্য আমরা কাগজের সাদা টুকরোটিকে পরবর্তী ইটের প্রতিস্থাপন করি। এই সাদা কাগজের টুকরোটি পুনরাবৃত্তকারী ছাড়া আর কিছুই নয় । এটি পাশাপাশি একটি বস্তু । তবে আমরা যা করতে পারি তা নিয়ে একটি অবজেক্ট এবং আমাদের পুনরাবৃত্ত বস্তুর উপাদানগুলির সাথে খেলতে পারি - ইটসকল
আমি যখন প্রথম আইডিএল-তে নিম্নলিখিত চেষ্টা করেছিলাম এবং একটি টাইপ-এরর পেয়েছিলাম তখন সেভাবে আমার প্রথম ভুলটি ব্যাখ্যা করে:
>>> X = [1,2,3,4,5]
>>> next(X)
Traceback (most recent call last):
File "<pyshell#19>", line 1, in <module>
next(X)
TypeError: 'list' object is not an iterator
লিস্ট এক্স এখানে আমাদের ইট কিট ছিল কিন্তু কাগজের সাদা টুকরা নয়। আমার প্রথমে একজন পুনরুক্তিকারীর সন্ধান করা দরকার:
>>> X = [1,2,3,4,5]
>>> bricks_kit = [1,2,3,4,5]
>>> white_piece_of_paper = iter(bricks_kit)
>>> next(white_piece_of_paper)
1
>>> next(white_piece_of_paper)
2
>>>
এটি সাহায্য করে কিনা জানি না তবে এটি আমাকে সাহায্য করেছিল। যদি কেউ ধারণাটির সঠিক ধারণা / সত্যায়ন করতে পারে তবে আমি কৃতজ্ঞ হব। এটি আমাকে আরও শিখতে সহায়তা করবে।
পরিবেশনযোগ্য : - এমন কিছু যা পুনরাবৃত্তিযোগ্য তা পুনরাবৃত্তিযোগ্য; তালিকাগুলি, স্ট্রিং ইত্যাদির মতো ক্রমগুলির মতো এটির __getitem__
পদ্ধতি বা একটি __iter__
পদ্ধতিও রয়েছে has এখন আমরা যদি iter()
সেই অবজেক্টটিতে ফাংশন ব্যবহার করি , আমরা একটি পুনরাবৃত্তি পেলাম।
আইট্রেটার : - যখন আমরা iter()
ফাংশন থেকে পুনরাবৃত্তি বস্তুটি পাই ; আমরা একে একে উপাদান পাওয়ার জন্য __next__()
পদ্ধতি (পাইথন 3 এ) বা কেবল next()
( পাইথন 2 তে) কল করি । এই শ্রেণীর এই শ্রেণি বা উদাহরণটিকে পুনরাবৃত্তকারী বলা হয়।
ডক্স থেকে:
পুনরাবৃত্তাকারগুলির ব্যবহার প্যাডনকে একত্রিত করে এবং একত্রিত করে। পর্দার আড়ালে, স্টেট স্টেটমেন্টটি iter()
ধারক বস্তুটিতে কল করে। ফাংশনটি একটি পুনরাবৃত্ত বস্তু ফেরত দেয় __next__()
যা সেই পদ্ধতিটি সংজ্ঞায়িত করে যা একবারে ধারকটিতে উপাদানগুলিতে অ্যাক্সেস করে। যখন আর কোনও উপাদান নেই, __next__()
স্টপআইটারেশন ব্যতিক্রম উত্থাপন করে যা লুপটি বন্ধ করতে বলে। আপনি বিল্ট-ইন ফাংশনটি __next__()
ব্যবহার করে পদ্ধতিটি কল করতে পারেন next()
; এই উদাহরণটি দেখায় যে এটি কীভাবে কাজ করে:
>>> s = 'abc'
>>> it = iter(s)
>>> it
<iterator object at 0x00A1DB50>
>>> next(it)
'a'
>>> next(it)
'b'
>>> next(it)
'c'
>>> next(it)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
next(it)
StopIteration
একটি ক্লাসের প্রাক্তন: -
class Reverse:
"""Iterator for looping over a sequence backwards."""
def __init__(self, data):
self.data = data
self.index = len(data)
def __iter__(self):
return self
def __next__(self):
if self.index == 0:
raise StopIteration
self.index = self.index - 1
return self.data[self.index]
>>> rev = Reverse('spam')
>>> iter(rev)
<__main__.Reverse object at 0x00A1DB50>
>>> for char in rev:
... print(char)
...
m
a
p
s
আমি মনে করি না যে আপনি এটি ডকুমেন্টেশনের চেয়ে অনেক সহজ পেতে পারেন তবে আমি চেষ্টা করব:
আপনি আইট্রেটরকে সহায়ক সিউডো-পদ্ধতি (বা সিউডো-অ্যাট্রিবিউট) হিসাবে ভাবতে পারেন যা পুনরাবৃত্তিতে পরবর্তী (বা প্রথম) আইটেমটি দেয় (বা ধরে রাখে) । (অনুশীলনে এটি কেবল একটি বিষয় যা পদ্ধতিটিকে সংজ্ঞায়িত করে next()
)
শব্দের মেরিলিয়াম-ওয়েস্টার সংজ্ঞা দ্বারা ইস্ট্রেশন সম্ভবত সেরাভাবে ব্যাখ্যা করা হয়েছে :
বি: কম্পিউটার নির্দেশের ক্রমের পুনরাবৃত্তি নির্দিষ্ট সময় বা একটি শর্ত পূরণ না হওয়া অবধি - পুনরাবৃত্তির তুলনা করে
iterable = [1, 2]
iterator = iter(iterable)
print(iterator.__next__())
print(iterator.__next__())
তাই হয়,
iterable
এমন একটি বস্তু যা লুপ করা যায় । যেমন তালিকা, স্ট্রিং, টুপল ইত্যাদি
iter
আমাদের iterable
অবজেক্টে ফাংশনটি ব্যবহার করে একটি পুনরুক্তিযোগ্য বস্তু ফিরে আসবে ।
এখন এই পুনরাবৃত্তকারী অবজেক্টটির নাম দেওয়া আছে __next__
(পাইথন 3 এ, বা কেবল next
পাইথন 2 এ) যার সাহায্যে আপনি পুনরাবৃত্তিযোগ্য প্রতিটি উপাদান অ্যাক্সেস করতে পারবেন ।
সুতরাং, উপরের কোডের আউটপুটটি হবে:
1
2
ইটারেবলগুলির একটি
__iter__
পদ্ধতি থাকে যা প্রতিবার নতুন পুনরাবৃত্তিকে ইনস্ট্যান্ট করে।আইট্রেটাররা এমন একটি
__next__
পদ্ধতি প্রয়োগ করে যা স্বতন্ত্র আইটেমগুলি ফেরত দেয় এবং এমন__iter__
পদ্ধতি যা প্রত্যাবর্তন করেself
।সুতরাং, পুনরুক্তিগুলিও পুনরাবৃত্ত হয় তবে পুনরাবৃত্তকারীগুলি পুনরাবৃত্ত হয় না।
লুসিয়ানো রামালহো, সাবলীল পাইথন।
পুনরাবৃত্তিযোগ্য এবং পুনরাবৃত্তকারীদের সাথে ডিলের আগে যে প্রধান ফ্যাক্টরটি পুনরাবৃত্তিযোগ্য এবং পুনরুক্তি স্থির করে তা সিদ্ধান্ত নেয় ence
সিকোয়েন্স: সিকোয়েন্স হ'ল ডেটা সংগ্রহ
পরিশ্রমযোগ্য: পরিশ্রমযোগ্য হ'ল ক্রম টাইপ অবজেক্ট যা সমর্থন __iter__
পদ্ধতিটি।
আইটার পদ্ধতি: আইটার পদ্ধতিটি ইনপুট হিসাবে ক্রম নেয় এবং এমন একটি উপাদান তৈরি করে যা পুনরায় হিসাবে পরিচিত
Iterator: Iterator হ'ল অবজেক্ট যা পরবর্তী পদ্ধতি কল করে এবং অনুক্রমের মধ্য দিয়ে ট্রান্সভার্স করে। পরবর্তী পদ্ধতিতে কল করার সময় এটি সেই বস্তুটি ফেরত দেয় যা এটি বর্তমানে ট্র্যাভার করে।
উদাহরণ:
x=[1,2,3,4]
এক্স একটি ক্রম যা ডেটা সংগ্রহ নিয়ে গঠিত
y=iter(x)
iter(x)
এটিকে কল করার সময় কেবল পুনরুক্তি ফেরত আসে যখন এক্স অবজেক্টটির ইটার পদ্ধতি রয়েছে অন্যথায় এটি একটি ব্যতিক্রম উত্থাপন করে I যদি এটি পুনরাবৃত্তিকে ফেরত দেয় তবে y এর মতো নির্ধারিত হবে:
y=[1,2,3,4]
যেহেতু y একটি পুনরাবৃত্তকারী তাই এটি next()
পদ্ধতি সমর্থন করে
পরবর্তী পদ্ধতিতে কল করার পরে তালিকার পৃথক উপাদানগুলি একে একে প্রদান করে।
সিক্যুয়েন্সের শেষ উপাদানটি ফিরে আসার পরে যদি আমরা আবার পরের পদ্ধতিটিকে কল করি তবে এটি স্টপআইটারেশন ত্রুটি উত্থাপন করে
উদাহরণ:
>>> y.next()
1
>>> y.next()
2
>>> y.next()
3
>>> y.next()
4
>>> y.next()
StopIteration
পাইথনে সবকিছুই একটি বস্তু। যখন কোনও অবজেক্টকে পুনরাবৃত্তিযোগ্য বলা হয়, এর অর্থ হ'ল আপনি সংগ্রহ হিসাবে পদক্ষেপটি (অর্থাৎ পুনরাবৃত্তি) পদক্ষেপ করতে পারেন।
উদাহরণস্বরূপ অ্যারেগুলি পুনরাবৃত্তিযোগ্য। লুপের জন্য আপনি তাদের মাধ্যমে পদক্ষেপ নিতে পারেন এবং সূচী 0 থেকে সূচী n, n এ অ্যারে অবজেক্টের বিয়োগ দৈর্ঘ্য 1 হওয়াতে যেতে পারেন।
শব্দভাণ্ডারগুলি (কী / মানের জোড়া, যাদেরকে এসোসিয়েটিভ অ্যারেও বলা হয়) এছাড়াও পুনরাবৃত্তিযোগ্য। আপনি তাদের কীগুলি দিয়ে পদক্ষেপ নিতে পারেন।
স্পষ্টতই যে বস্তুগুলি সংগ্রহ নয় সেগুলি পুনরাবৃত্ত হয় না। উদাহরণস্বরূপ একটি বুল অবজেক্টের কেবল একটি মান, সত্য বা মিথ্যা থাকে। এটি পুনরাবৃত্তিযোগ্য নয় (এটি কোনও পুনরাবৃত্ত বস্তু তা বোঝা যাবে না)।
আরও পড়ুন। http://www.lepus.org.uk/ref/companion/Iterator.xml
iter()
স্ট্যান্ডার্ড সংগ্রহের ধরণে কল করে তৈরি করা পুনরুক্তিযোগ্য বস্তুগুলি পুনরুক্তিযোগ্য তবে সেগুলি নিজেই সংগ্রহ নয়।
collections.abc.AsyncIterator
পরীক্ষা__aiter__
এবং__anext__
পদ্ধতি জন্য। এটি 3.6 এ একটি নতুন সংযোজন।