मैंने किसी चीज़ उपवर्ग जो एक गतिशील प्रेषण __ iter __
लागू करता है एक कैशिंग जनरेटर का उपयोग किया है के रूप में कार्यान्वित तो की तरह (मैं भी आईटीईआर कैश अमान्य के लिए एक विधि है):__iter __() एक जनरेटर
def __iter__(self):
print("iter called")
if self.__iter_cache is None:
iter_seen = {}
iter_cache = []
for name in self.__slots:
value = self.__slots[name]
iter_seen[name] = True
item = (name, value)
iter_cache.append(item)
yield item
for d in self.__dc_list:
for name, value in iter(d):
if name not in iter_seen:
iter_seen[name] = True
item = (name, value)
iter_cache.append(item)
yield item
self.__iter_cache = iter_cache
else:
print("iter cache hit")
for item in self.__iter_cache:
yield item
यह लगता है काम कर रहे हैं ... क्या कोई गठिया है जिसके बारे में मुझे पता नहीं हो सकता है? क्या मैं कुछ हास्यास्पद कर रहा हूँ?
मैं कम से कम 'iter_seen' संरचना के लिए एक' dict' के बजाय एक [ 'set'] (http://docs.python.org/library/stdtypes.html#set) का प्रयोग करेंगे। –
एचएम, यह वास्तव में मुझे क्या हासिल करेगा? चूंकि मुझे सेट बीजगणित की आवश्यकता नहीं है, इसलिए यह अधिक उचित और हल्के कार्यान्वयन नहीं होगा? –
'_ में _ _ के साथ 'i _ में' _ के साथ 'बदलें। आपको 'स्टेटर' के लिए 'iter' की आवश्यकता नहीं है – jfs