Mam podklasy obiektu, który implementuje dynamiczny wysyłkę __ iter __
pomocą generatora buforowania (mam również sposobu unieważniania ITER cache) tak:__iter __() realizowane jako generator
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
Wydaje Działaj ... Czy są jakieś błędy, o których może nie być świadomy? Czy robię coś absurdalnego?
będę przynajmniej używać [ 'set'] (http://docs.python.org/library/stdtypes.html#set) zamiast' dict' do 'iter_seen' struktury. –
Hm, co by mnie to naprawdę zyskało? Ponieważ nie potrzebuję ustawionej algebry, czy dyktowanie nie byłoby bardziej rozsądną i lekką implementacją? –
zamień 'dla _ w iter (cokolwiek)' z 'dla _ w czymkolwiek '. Nigdy nie potrzebujesz 'iter' wewnątrz' for' oświadczenia – jfs