आप पायथन में सभी स्थानों के itemsबजाय उपयोग नहीं कर सकते iteritems। उदाहरण के लिए, निम्न कोड:
class C:
def __init__(self, a):
self.a = a
def __iter__(self):
return self.a.iteritems()
>>> c = C(dict(a=1, b=2, c=3))
>>> [v for v in c]
[('a', 1), ('c', 3), ('b', 2)]
यदि आप उपयोग करते हैं तो टूट जाएगा items:
class D:
def __init__(self, a):
self.a = a
def __iter__(self):
return self.a.items()
>>> d = D(dict(a=1, b=2, c=3))
>>> [v for v in d]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: __iter__ returned non-iterator of type 'list'
दृश्य के लिए भी यही सच है , जो पायथन 3 में उपलब्ध है।
इसके अलावा, चूंकि आइटम(key, value) जोड़े की जोड़ी की सूची की एक प्रति लौटाते हैं , इसलिए यह कम कुशल है, जब तक कि आप किसी भी तरह एक प्रतिलिपि नहीं बनाना चाहते।
पायथन 2 में, iteritemsपुनरावृत्ति के लिए उपयोग करना सबसे अच्छा है । 2to3उपकरण के साथ यह जगह ले सकता है itemsअगर तुम कभी अजगर 3 में नवीनीकृत करने का फैसला।
iteritemsयह एक पुनरावृत्ति है, यही वजह है कि यह इतना उपयोगी है। मैं लगभग एक सूची के रूप में एक शब्दकोश पर पुनरावृति नहीं करना चाहता। तो क्या कुछ जनरेटर के साथ शब्दकोश पर पुनरावृति करने का सही तरीका है जैसे कि पायथन 2 और 3 दोनों के साथ संगत है?