Dictionaries Iteration and Optimization in Python के अनुसार हर वह Object Iterable है जो Memory में Physically एक Sequence में Stored हो अथवा वह Object जो कि एक Iteration Operation में एक Single Item को Generate करता हो जैसा कि पिछले Example में हो रहा है, जहां for…in Loop एक बार में एक Single Character को name Variable से Access करके Upper Case Letter में Convert कर रहा है।
ज्यादा आसान शब्दों में कहें तो दोनों ही तरह के Objects को Iterable कहा जा सकता है क्योंकि ये दोनों ही तरह के Objects Iteration Protocol को Support करते हैं जिसके परिणामस्वरूप ऐसे Objects iter() Call को Respond करते हैं और Current Data Item को Return करने के बाद Response को next() Call पर तब तक आगे बढ़ाते रहते हैं जब तक कि Iterable Object से Next Value Produce होना बन्द न हो जाए।
यानी Python Interpreter, Iterative Object के अन्तिम Item से आगे न निकल जाए जहां और कोई Accessible Item Exist न हो, जिसके परिणामस्वरूप एक Exception Raise होता है और इस Exception से ही Python Interpreter को पता चलता है कि अब उस Iterable Object में कोई भी Data Item Access होने के लिए नहीं बचा है।
हमने जिस Generator Comprehension Expression को पहले देखा है वो एक ऐसा Object होता है, जिसकी सभी Values, Memory में एक साथ एक ही बार में Store नहीं होती हैं, लेकिन जब हम ऐसे Object की Request करते हैं, तो वे सभी Values, Iteration Tool के कारण ही एक ही बार में एक साथ Produce हो जाती हैं जिन्हें हम Access कर पाते हैं अथवा Output में Display कर पाते हैं।
ठीक इसी तरह से ही Python का File Object भी किसी Iteration Tool के माध्यम से ही Line by Line Iterate होता है, क्योंकि File के Content किसी List में नहीं होते, बल्कि वे Command के माध्यम से Fetch होते हैं।
हर वह तरीका जिससे हम Python के किसी Object के सभी Data Items को एक साथ एक ही बार में Scan करके Access and Manipulate करने की सुविधा प्राप्त कर लेते हैं, Iteration Tool कहलाता है और हर Iteration Tool, विभिन्न Data Items को Left-to-Right Access करने के लिए Iteration Protocol का प्रयोग करता है।
इसी वजह से पिछले Example में हमने जो sorted() Method Call किया था, उसने Dictionary Object के Data Items को भी Sort कर दिया था और Sorting के लिए हमें Dictionary के keys() Method को Call नहीं करना पड़ा था क्योंकि Dictionary, next() Call युक्त एक प्रकार का Iterable Object होता है जो Dictionary के Next Successive Keys को Return करता है।
इसी वजह से हम किसी भी ऐसे List Comprehensive Expression को for…in Loop के माध्यम से Access and Manipulate कर सकते हैं, जिसमें किसी न किसी तरह का Computation किया गया हो। इस प्रक्रिया को निम्न Example द्वारा बेहतर तरीके से समझा जा सकता है-
[code] FileName: ListComprehensiveExpression.py print("List Comprehensive Expression " ) lstComprensiveExpression = [x ** 2 for x in [1, 2, 3, 4, 5]] print("Squares List: ", lstComprensiveExpression, '\n') equivalentForLoop = [] print("Same Output with for...in Loop: " ) for x in [1, 2, 3, 4, 5]: equivalentForLoop.append(x ** 2) print("Squares List: ", equivalentForLoop, '\n') Output List Comprehensive Expression Squares List: [1, 4, 9, 16, 25] Same Output with for...in Loop: Squares List: [1, 4, 9, 16, 25] [/code]
इस Example में हमने एक Inner List Object Create किया है जिसमें 1 से 5 तक की संख्याऐं Data Items के रूप में Stored हैं और फिर Comprehensive Expression के माध्यम से प्रत्येक Inner List Item के Square Value को Generate करके उसे Outer List Object के Data Items के रूप में Store कर दिया है। जिसके परिणामस्वरूप जो Final List Object Create होता है, उसमें 1 से 5 तक की संख्याओं का Square Stored होता है।
जबकि अगले Code Block में हमने इसी समान Output को एक for … in Loop के माध्यम से Generate किया हैं जिसके अन्तर्गत सबसे पहले हमने 1 से 5 तक की संख्याओं का एक List Object Create किया है और उसके बाद append() Method Call करते हुए प्रत्येक List Item के Square को Calculate करके equivalentForLoop List Object में Store कर दिया है।
अन्त में जब हम इन दोनों तरीकों से Generate होने वाले Output को देखते हैं, तो दोनों का Output एक समान मिलता है। इसका मतलब यही है कि दोनों तरीकें एक जैसा Output Generate करने के लिए Internally Iteration Protocol को ही Use कर रहे हैं।
List Comprehension व map तथा filter जैसे Functional Programming Tools सामान्यत: for Loop की तुलना में ज्यादा Fast चलते हैं। लेकिन फिर भी प्रत्येक स्थिति में ये बात पूरी तरह से सही नहीं होती। इसलिए Python में हम किसी एक तरीके को Best Iterative Tool नहीं मान सकते क्योंकि Python में एक ही काम को कई तरीकों से किया जा सकता है।
इसी वजह से Python Programming के दौरान Code की Simplicity और Readability को First Priority देते हैं और Performance को हमेंशा Secondary Level पर रखते हैं। जब एक बार हमारा Program Completely Up and Running हो जाता है, Performance Optimization से सम्बंधित Concerns को उसके बाद Handle किया जाता है।
अपने Codes की Performance को Tweak करने के लिए भी Python हमें time व timeit नाम के Modules Provide करता है, जिनके माध्यम से हम अपने Python Application की Performance को Optimize करने के लिए विभिन्न प्रकार के Tests Perform कर सकते हैं। (Dictionaries Iteration and Optimization in Python in Hindi)
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook Python in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी है, तो निश्चित रूप से ये EBook भी आपके लिए काफी उपयोगी साबित होगी।
Python in Hindi | Page: 602 | Format: PDF