[Python-Dev] Fwd: Range __contains__ and objects with __index__ methods
Mark Dickinson
dickinsm at gmail.com
Mon Dec 27 13:46:21 CET 2010
.. and here's my original reply to Nick, which was also intended to go
to the list. Sorry, folks.
Mark
---------- Forwarded message ----------
From: Mark Dickinson <dickinsm at gmail.com>
Date: Mon, Dec 27, 2010 at 10:27 AM
Subject: Re: [Python-Dev] Range __contains__ and objects with __index__ methods
To: Nick Coghlan <ncoghlan at gmail.com>
On Mon, Dec 27, 2010 at 12:15 AM, Nick Coghlan <ncoghlan at gmail.com> wrote:
> Starting in Python 3.2, range() supports fast containment checking for
> integers (i.e. based on an O(1) arithmetic calculation rather than an
> O(N) iteration through the entire sequence).
>
> Currently, this fast path ignores objects that implement __index__ -
> they are relegated to the slow iterative search.
>
> This seems wrong to me [...]
Is seems to me that there are two separate issues here. Namely, (1)
Determine the semantics of 'x in range(...)' for an object x that
implements __index__, and (2) implement the containment check
efficiently.
At the moment, it looks as though the __index__ method is ignored
entirely for the containment check, so you're proposing a change in
semantics. If/when that change in semantics is made, fixing up the
code to do the containment check efficiently seems like it should be a
straightforward task.
With the proposed change in semantics, the simple definition (x in
range(...) iff x == y for some element y of range(...)) no longer
holds. I'm not convinced (but not unconvinced either) that it's worth
breaking that simplicity.
Mark
More information about the Python-Dev
mailing list