[Numpy-discussion] logical_and operator, &&, is missing?
Eric Firing
efiring at hawaii.edu
Sat Jun 24 16:57:19 EDT 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
More information about the NumPy-Discussion
mailing list