Iteration Protocol in Python – Example Explained

Iteration Protocol in Python – Example Explained – Python का Iteration Protocol का प्रयोग Loops, Comprehensions, Maps आदि द्वारा use किया जाता है और Files, Lists, Dictionaries, Generators आदि द्वारा Supported होता है। कुछ Objects, Iteration ContextIterable Objects दोनों होते हैं जैसे कि map(), zip(), range() आदि, जबकि कुछ Objects, Iterable Iterator दोनों होते हैं, जो iter() Method के लिए स्‍वयं को ही Return करते हैं।

हम निम्‍नानुसार एक Actual Code के Example Program द्वारा for Loop की Internal Working को ज्‍यादा बेहतर तरीके से समझ सकते हैं-

[code]
FileName: forLoop-InternalWorking.py
lstNames = ['KRISHNA','MURARI','SHYAM','BIHARI']
print("Simple Working of for Loop")
for name in lstNames:
    print(name)

print()

print("Internal Working of for Loop")
i = iter(lstNames)
print(i.__next__())
print(i.__next__())
print(i.__next__())
print(i.__next__())
print(i.__next__())

Output
Simple Working of for Loop
KRISHNA
MURARI
SHYAM
BIHARI
Internal Working of for Loop
KRISHNA
MURARI
SHYAM
BIHARI
Traceback (most recent call last):
  File ".\forLoop-InternalWorking.py", line 15, in <module>
    print(i.__next__())
StopIteration
[/code]

इस Example में जिस तरह से for Loop Execute होकर lstNames List के सभी Data Items को Output में Display करता है, वही for Loop Internally किस तरह से Expand होकर Execute होता है] उसे भी Represent किया गया है।

यानी वास्‍तव में जब for Loop Execute होना शुरू होता है, तो Internally सबसे पहले Specified iterable Object यानी lstNames iter() Method को Parameter की तरह Pass होता है, जो कि Internally __iter__() Method का ही Alternative है। ये iter() Method, lstNames List के सबसे पहले Data Item को Iterator Object name में Store कर देता है, जिसे for Loop के Statement Block द्वारा Access and Manipulate किया जाता है।

साथ ही __next__() Method द्वारा Program Control को lstNames Iterable के दूसरे Data Item पर Place कर दिया जाता है। परिणामस्‍वरूप अगले Iteration में Iterator name में lstNames Iterable का दूसरा Data Item Store हो जाता है और ये प्रक्रिया तब तक चलती रहती है, जब तक कि Program Control, lstNames के अन्तिम Data Item को Access नहीं कर लेता। जैसे ही Program Control को lstNames में Scan करने के लिए कोई Data Item नहीं बचता, StopIteration Exception Trigger होता है, और Program Control, for Loop के Statement Block से Exit हो जाता है।

जब हम File Handling करते हैं, उस समय हमें Initial Step को Specify करना जरूरी नहीं होता, क्‍योंकि File Object का स्‍वयं का Iterator होता है जो कि केवल एक Single Iteration को ही Support करता है। यानी हम किसी File में Iterators के माध्‍यम से Backward Scanning करते हुए एक बार Read किए जा चुके Content को फिर से Backward जाकर Re-Scan नहीं कर सकते। एक बार में एक File को केवल Forward Direction में ही Scan किया जा सकता है।

Lists व कई अन्‍य तरह के Built-In Objects में File Object की तरह उनका स्‍वयं का Iterator नहीं होता क्‍योंकि हम इन Objects को Multiple Times Backward व Forward Iterate कर सकते हैं।

उदाहरण के लिए हम List को Nested Form में Access कर सकते हैं और उस स्थिति में Nested Loops एक ही List के विभिन्‍न Data Items को Different Positions से समान समय पर Access and Manipulate कर सकते हैं। इसलिए इस तरह के Objects के लिए हमें Iteration की शुरूआत iter() Method को Invoke करके करनी होती है और उसके बाद प्रत्‍येक अगले Item को Access करने के लिए हमें __next__() Method को Use करना होता है।

Files व List जैसे Physical Sequences की तरह ही Dictionary भी एक उपयोगी Iterator है और किसी Dictionary के Data Items को Access and Manipulate करने का एक Classic तरीका है keys() Method का प्रयोग करते हुए Dictionary के Data Items को Use करना। जैसे-

[code]
FileName: dict-Iterable.py
dicNames = {'name':'KRISHNA','age':6,'cast':'YADAV'}
print("Accessing Data Items using keys() Method")
for key in dicNames.keys():
    print(key.capitalize(), ":", dicNames[key])

print()

print("Internal Working of Iteration Protocol")
i = iter(dicNames)
key = i.__next__()
print(key.capitalize(),":", dicNames[key])
key = i.__next__()
print(key.capitalize(),":", dicNames[key])
key = i.__next__()
print(key.capitalize(),":", dicNames[key])
key = i.__next__()
print(key.capitalize(),":", dicNames[key])

Output
Accessing Data Items using keys() Method
Name : KRISHNA
Age : 6
Cast : YADAV
Internal Working of Iteration Protocol
Name : KRISHNA
Age : 6
Cast : YADAV
Traceback (most recent call last):
  File ".\dict-Iterable.py", line 17, in <module>
    key = i.__next__()
StopIteration
[/code]

इस Example द्वारा भी हम आसानी से समझ सकते हैं कि iter() व next() Methods किस तरह से Internally काम करते हुए for Loop के माध्‍यम से Dictionary Object के Data Items को One by One Access and Manipulate करने की सुविधा प्रदान करते हैं।

Python in Hindi - BccFalna.comये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook Python in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी है, तो निश्चित रूप से ये EBook भी आपके लिए काफी उपयोगी साबित होगी।

Python in Hindi | Page: 602 | Format: PDF

BUY NOW GET DEMO REVIEWS