[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