On 7/23/06, Andrew Koenig <[EMAIL PROTECTED]> wrote:
> > But you've just pointed out that they're *not*
> > the same kind of concept, no matter how much
> > you might wish that there were.
>
> > The only way to make hashability testable at
> > less cost than attempting to do it would be
> > to have a separate __is_hashable__ method for
> > that purpose, which would recursively test
> > contents when necessary.
>
> This issue started out as a question of side effects; from an architectural
> viewpoint, I consider performance to be less important because side effects
> are likely to affect correctness.
>
> So I don't particularly care whether testing for hashability is less
> expensive than trying to do the hash.  What I do care about is being able to
> determine whether an object has a particular property without having to
> worry about whether I might change the state of the system in whatever ways
> are necessary to compute that property.
>
> This question is probably sharpest for callability, because it is clear that
> evaluating foo() might do anything at all, and sometimes I want to control
> when that anything happens.
>
> Nevertheless, I don't agree that testing hashability has to be as expensive
> as computing the hash.  As a simple example, one can see instantly that even
> a very long string is hashable, even though computing the value of the hash
> might take a long time if the string is large.

I propose to take the same approach as for callable: if it has
__hash__ we consider it hashable even though the hash may fail (e.g.
if it's a tuple containing an unhashable object). This is roughly
equivalent to the usefulness of callable: the call may still fail if
the signature doesn't match.

-- 
--Guido van Rossum (home page: http://www.python.org/~guido/)
_______________________________________________
Python-3000 mailing list
Python-3000@python.org
http://mail.python.org/mailman/listinfo/python-3000
Unsubscribe: 
http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com

Reply via email to