'छोरों' के लिए 'का उपयोग करते हुए शब्दकोशों पर फेरबदल
d = {'x': 1, 'y': 2, 'z': 3}
for key in d:
...
पायथन कैसे पहचानता है कि इसे केवल शब्दकोश से कुंजी पढ़ने की आवश्यकता है? क्या पायथन में एक विशेष शब्द है? या यह केवल एक चर है?
यह सिर्फ for
लूप नहीं है। यहाँ महत्वपूर्ण शब्द "पुनरावृति" है।
एक शब्द मूल्यों की कुंजी का मानचित्रण है:
d = {'x': 1, 'y': 2, 'z': 3}
किसी भी समय हम इस पर पुनरावृत्ति करते हैं, हम कुंजियों पर पुनरावृति करते हैं। चर नाम key
केवल वर्णनात्मक होने का इरादा है - और यह उद्देश्य के लिए काफी उपयुक्त है।
यह एक सूची समझ में आता है:
>>> [k for k in d]
['x', 'y', 'z']
ऐसा तब होता है जब हम डिक्शनरी (या किसी अन्य संग्रह प्रकार ऑब्जेक्ट) के लिए शब्दकोश पास करते हैं:
>>> list(d)
['x', 'y', 'z']
जिस तरह से पायथन पुनरावृत्त करता है, एक संदर्भ में जहां उसे इसकी आवश्यकता होती है, वह __iter__
वस्तु की विधि को बुलाता है (इस मामले में शब्दकोश) जो एक पुनरावृत्त लौटाता है (इस मामले में, एक मुख्य वस्तु):
>>> d.__iter__()
<dict_keyiterator object at 0x7fb1747bee08>
हमें इन विशेष विधियों का उपयोग स्वयं नहीं करना चाहिए, इसके बजाय, इसे कॉल करने के लिए संबंधित अंतर्निहित फ़ंक्शन का उपयोग करें iter
:
>>> key_iterator = iter(d)
>>> key_iterator
<dict_keyiterator object at 0x7fb172fa9188>
Iterators में एक __next__
विधि है - लेकिन हम इसे बेसिन फ़ंक्शन के साथ कहते हैं next
:
>>> next(key_iterator)
'x'
>>> next(key_iterator)
'y'
>>> next(key_iterator)
'z'
>>> next(key_iterator)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
जब एक इटरेटर समाप्त हो जाता है, तो यह बढ़ जाता है StopIteration
। यह कैसे पायथन एक for
पाश से बाहर निकलने के लिए जानता है , या एक सूची समझ, या एक जनरेटर अभिव्यक्ति, या किसी अन्य पुनरावृत्त संदर्भ। एक बार जब एक StopIteration
पुनरावृत्ति उठाता है तो यह हमेशा इसे बढ़ाएगा - यदि आप फिर से पुनरावृति करना चाहते हैं, तो आपको एक नया चाहिए।
>>> list(key_iterator)
[]
>>> new_key_iterator = iter(d)
>>> list(new_key_iterator)
['x', 'y', 'z']
डाइक्ट्स में लौटते हुए
हमने कई संदर्भों में पुनरावृत्तियों को देखा है। हमने जो देखा है, वह यह है कि किसी भी समय हम एक तानाशाही पर चलते हैं, हमें चाबी मिल जाती है। मूल उदाहरण पर वापस जाएं:
d = {'x': 1, 'y': 2, 'z': 3}
for key in d:
यदि हम परिवर्तनशील नाम को बदलते हैं, तो हम अभी भी कुंजी प्राप्त करते हैं। चलो यह कोशिश करते हैं:
>>> for each_key in d:
... print(each_key, '=>', d[each_key])
...
x => 1
y => 2
z => 3
यदि हम मूल्यों पर पुनरावृत्ति करना चाहते हैं, तो हमें .values
dicts की विधि का उपयोग करने की आवश्यकता है , या दोनों के लिए एक साथ .items
:
>>> list(d.values())
[1, 2, 3]
>>> list(d.items())
[('x', 1), ('y', 2), ('z', 3)]
दिए गए उदाहरण में, इस तरह की वस्तुओं पर पुनरावृति करना अधिक कुशल होगा:
for a_key, corresponding_value in d.items():
print(a_key, corresponding_value)
लेकिन अकादमिक उद्देश्यों के लिए, प्रश्न का उदाहरण ठीक है।