[Python-Dev] "and" and "or" operators in Py3.0
Nicolas Fleury
nidoizo at yahoo.com
Tue Sep 20 08:00:30 CEST 2005
Raymond Hettinger wrote:
> I propose that in Py3.0, the "and" and "or" operators be simplified to
> always return a Boolean value instead of returning the last evaluated
> argument.
Please no. I find things like:
def __cmp__(self, other):
return (cmp(self.a, other.a) or
cmp(self.b, other.b) or
cmp(self.c, other.c))
somehow elegant...
But I don't know how this can be useful for "and" however.
> 1) The construct can be error-prone. When an error occurs it can be
> invisible to the person who wrote it. I got bitten in published code
> that had survived testing and code review:
>
> def real(self):
> 'Return a vector with the real part of each input element'
> # do not convert integer inputs to floats
> return self.map(lambda z: type(z)==types.ComplexType and z.real or
> z)
As others pointed, if lambda is to be possibly removed in py3.0, it
would be better to have an example not using it.
FWIW, I've never had a problem with that, but however I use the feature...
Quite the opposite actually, I even though about overriding and and or
to build event-driving expression, which I can't... well, forget about
that;)
> 2) When going back and forth between languages, it is easy to forget
> that only Python returns something other than a boolean.
Well, there's a lot of things I miss from Python when going back and
forth between languages. You need a better argument to convince me to
also miss that one in Python;)
I think it's not reasonable to remove the feature without adding a ?:
syntax. I personally like the status quo.
Regards,
Nicolas
More information about the Python-Dev
mailing list