> To avoid the exception in the discard method, it could be 
> implemented as:
> 
>     def discard(self, element):
>         """Remove an element from a set if it is a member.
> 
>         If the element is not a member, do nothing.
>         """
>         try:
>             self._data.pop(element, None)
>         except TypeError:
>             transform = getattr(element, 
> "__as_temporarily_immutable__", None)
>             if transform is None:
>                 raise # re-raise the TypeError exception we caught
>             del self._data[transform()]
[...]
> But the dict.pop method is about 12 times faster. Is this worth doing?

The 2.4 builtin set's discard function looks like it does roughly the same
as the 2.3 sets.Set.  Have you tried comparing a C version of your version
with the 2.4 set to see if there are speedups there, too?

IMO keeping the sets.Set version as clean and readable as possible is nice,
since the reason this exists is for other implementations (Jython, PyPy,
...) and documentation, right?  OTOH, speeding up the CPython implementation
is nice and it's read by many fewer people.

=Tony.Meyer

_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to