[Python-checkins] python/dist/src/Lib sets.py,1.6,1.7
rhettinger@users.sourceforge.net
rhettinger@users.sourceforge.net
Tue, 20 Aug 2002 18:35:31 -0700
Update of /cvsroot/python/python/dist/src/Lib
In directory usw-pr-cvs1:/tmp/cvs-serv4509
Modified Files:
sets.py
Log Message:
Optimize try/except ordering in sets.py.
Gains a 5:1 speed-up for membership testing by
handling the most common case first (the case
where the element is hashable).
Closes SF Patch 597444.
Index: sets.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/sets.py,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** sets.py 20 Aug 2002 23:34:01 -0000 1.6
--- sets.py 21 Aug 2002 01:35:29 -0000 1.7
***************
*** 228,237 ****
"""
try:
! transform = element._as_temporarily_immutable
! except AttributeError:
! pass
! else:
! element = transform()
! return element in self._data
# Subset and superset test
--- 228,237 ----
"""
try:
! return element in self._data
! except TypeError:
! transform = getattr(element, "_as_temporary_immutable", None)
! if transform is None:
! raise # re-raise the TypeError exception we caught
! return transform() in self._data
# Subset and superset test
***************
*** 370,381 ****
data = self._data
value = True
! for elt in iterable:
try:
! transform = elt._as_immutable
! except AttributeError:
! pass
! else:
! elt = transform()
! data[elt] = value
def clear(self):
--- 370,381 ----
data = self._data
value = True
! for element in iterable:
try:
! data[element] = value
! except TypeError:
! transform = getattr(element, "_as_temporary_immutable", None)
! if transform is None:
! raise # re-raise the TypeError exception we caught
! data[transform()] = value
def clear(self):
***************
*** 391,400 ****
"""
try:
! transform = element._as_immutable
! except AttributeError:
! pass
! else:
! element = transform()
! self._data[element] = True
def remove(self, element):
--- 391,400 ----
"""
try:
! self._data[element] = True
! except TypeError:
! transform = getattr(element, "_as_temporary_immutable", None)
! if transform is None:
! raise # re-raise the TypeError exception we caught
! self._data[transform()] = True
def remove(self, element):
***************
*** 404,413 ****
"""
try:
! transform = element._as_temporarily_immutable
! except AttributeError:
! pass
! else:
! element = transform()
! del self._data[element]
def discard(self, element):
--- 404,413 ----
"""
try:
! del self._data[element]
! except TypeError:
! transform = getattr(element, "_as_temporary_immutable", None)
! if transform is None:
! raise # re-raise the TypeError exception we caught
! del self._data[transform()]
def discard(self, element):