Ho una sottoclasse oggetto che implementa una distribuzione dinamica __ iter __
utilizzando un generatore di cache (Ho anche un metodo per invalidare la cache iter) in questo modo:__iter __() implementato come un generatore
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
sembra sta lavorando ... Ci sono dei trucchi che potrei non essere a conoscenza? Sto facendo qualcosa di ridicolo?
vorrei almeno usare un [ 'set'] (http://docs.python.org/library/stdtypes.html#set) invece di un' dict' per la struttura 'iter_seen'. –
Hm, cosa mi guadagnerebbe davvero? Dal momento che non ho bisogno dell'algebra, non sarebbe un'implementazione più ragionevole e leggera? –
sostituisci 'per _ in iter (qualunque cosa)' con 'for _ in qualunque'. Non hai mai bisogno di 'iter' all'interno di' for' statement – jfs