Tôi có một lớp đối tượng mà thực hiện một cử động __ iter __
sử dụng một máy phát bộ nhớ đệm (Tôi cũng có một phương pháp vô hiệu các bộ nhớ cache ITER) như sau:__iter __() thực hiện như một máy phát điện
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
Dường như với được làm việc ... Có bất kỳ gotchas tôi có thể không nhận thức được? Tôi có làm điều gì đó vô lý không?
Tôi ít nhất sẽ sử dụng ['set'] (http://docs.python.org/library/stdtypes.html#set) thay vì' dict' cho cấu trúc 'iter_seen'. –
Hm, điều gì khiến tôi thực sự? Vì tôi không cần thiết lập đại số, sẽ không dict được một thực hiện hợp lý hơn và nhẹ? –
thay thế 'cho _ trong lần lặp (bất kỳ)' bằng 'cho _ trong bất cứ điều gì'. Bạn không bao giờ cần 'iter' bên trong câu lệnh' for' – jfs