[Numpy-discussion] logical_and operator, &&, is missing? (original) (raw)

Robert Kern robert.kern at gmail.com
Sat Jun 24 16:43:58 EDT 2006


Eric Firing wrote:

Robert Kern wrote:

Eric Firing wrote:

It seems that the logical operators || and &&, corresponding to logicalor and logicaland are missing; one can do

z = logicaland(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