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

Eric Firing efiring at hawaii.edu
Sat Jun 24 15:57:19 CDT 2006

```Robert Kern wrote:
> 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.

That makes sense, and implies that the real solution would be the
introduction of operators && and || into Python, or a facility that
would allow extensions to add operators.  I guess it would be a matter
of having hooks into the parser.  I have no idea whether either of these
is a reasonable goal--but it certainly would be a big plus for Numpy.

Eric

```