From: Eric F. <ef...@ha...> - 2006-06-24 20:57:24
|
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 |