[Numpy-discussion] logical_and operator, &&, is missing?

Robert Kern robert.kern at gmail.com
Sat Jun 24 15:43:58 CDT 2006


Eric Firing wrote:
> Robert Kern wrote:
>> Eric Firing wrote:
>>
>>> It seems that the logical operators || and &&, corresponding to 
>>> logical_or and logical_and are missing; one can do
>>>
>>> z = logical_and(x,y)
>>>
>>> but not
>>>
>>> z = x && y
>>>
>>> Is there an inherent reason, or is this a bug?
>>
>> Python does not have a && operator. It has an "and" keyword, but that cannot be 
>> overridden. If you know x and y to be boolean arrays, & and | work fine.
> 
> Out of curiosity, is there a simple explanation as to why "and" cannot 
> be overridden but operators like "&" can?  Is it a fundamental 
> distinction between operators and keywords?

Sort of. "and" and "or" short-circuit, that is they stop evaluating as soon as 
the right value to return is unambiguous.

In [1]: def f():
    ...:     print "Shouldn't be here."
    ...:
    ...:

In [2]: False and f()
Out[2]: False

In [3]: True or f()
Out[3]: True

Consequently, they must yield True and False only.

> In any case, it sounds like we are indeed stuck with an unfortunate wart 
> on numpy, unless some changes in Python can be made.  Maybe for 
> Python3000...
> 
> The NumPy for Matlab users wiki is misleading in this area; I will try 
> to fix it.

Thank you.

-- 
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
  that is made terrible by our own mad attempt to interpret it as though it had
  an underlying truth."
   -- Umberto Eco





More information about the Numpy-discussion mailing list