On 5/5/2011 6:59 AM, Steven D'Aprano wrote:
On Thu, 05 May 2011 21:48:20 +1000, Chris Angelico wrote:
On Thu, May 5, 2011 at 9:44 PM, Mel<mwil...@the-wire.com> wrote:
John Nagle wrote:
On 5/4/2011 5:46 PM, harrismh777 wrote:
Or, as stated earlier, Python should not allow 'is' on immutable
objects.
A reasonable compromise would be that "is" is treated as "==" on
immutable objects.
I foresee trouble testing among float(5), int(5), Decimal(5) ...
Define 'x is y' as 'type(x)==type(y) and
isinstance(x,(int,float,tuple,etc,etc,etc)) and x==y' then.
That's close to the right answer.
`is` is supposed to be a *fast* operator, not even slower than equality
testing.
That's an implementation problem. Those are cheap tests at the
machine code level. An efficient test looks like this:
def istest(a, b) :
if id(a) == id(b) : # the cheap address test
return(True)
if type(x) != type(y) : # cheap binary comparison
return(False)
if mutable(x) : # the interpreter knows this
return(False)
return(x == y) # equality test for mutables
Probably about 12 machine instructions, and the full "==" test
is only reached for cases in which "is" now produces wrong answers.
It's encouraging that a Google code search finds no matches of
if .* is \"
or
if .* is 1
in Python code.
John Nagle
--
http://mail.python.org/mailman/listinfo/python-list