[Zope-Checkins] SVN: Zope/branches/2.13/src/Products/ZCatalog/Lazy.py avoid pre-allocating the entire sequence, which adds unnecessary overhead in most cases. instead use a dictionary to remember the already mapped sequence items.

Andreas Zeidler az at zitc.de
Wed Dec 15 02:38:29 EST 2010


Log message for revision 118896:
  avoid pre-allocating the entire sequence, which adds unnecessary overhead in most cases.  instead use a dictionary to remember the already mapped sequence items.

Changed:
  U   Zope/branches/2.13/src/Products/ZCatalog/Lazy.py

-=-
Modified: Zope/branches/2.13/src/Products/ZCatalog/Lazy.py
===================================================================
--- Zope/branches/2.13/src/Products/ZCatalog/Lazy.py	2010-12-15 07:38:21 UTC (rev 118895)
+++ Zope/branches/2.13/src/Products/ZCatalog/Lazy.py	2010-12-15 07:38:29 UTC (rev 118896)
@@ -146,24 +146,18 @@
 
     def __init__(self, func, seq, length=None):
         self._seq = seq
+        self._data = {}
         self._func = func
         if length is not None:
             self._len = length
         else:
             self._len = len(seq)
-        self._marker = object()
-        self._data = [self._marker] * self._len
 
     def __getitem__(self, index):
         data = self._data
-        try:
-            s = self._seq
-        except AttributeError:
+        if index in data:
             return data[index]
-
-        value = data[index]
-        if value is self._marker:
-            value = data[index] = self._func(s[index])
+        value = data[index] = self._func(self._seq[index])
         return value
 
 



More information about the Zope-Checkins mailing list