I'm not in favour of of adding an xor operator, but it seems to me it IS possible to make it behave somewhat analagously to 'and' and 'or' as far as what it returns:
X xor Y evaluates to:
X if bool(X)==True and bool(Y)==False Y if bool(Y)==True and bool(X)==False False if bool(X)==Bool(Y)==True Y if bool(X)==bool(Y)==False
The last case is analagous to X or Y evaluating to Y when bool(X)==bool(Y)==False, e.g. 0 or  ==   or 0 == 0
Admittedly there is an aestheically unpleasing asymmetry here. But it means you could write code such as Z = X xor Y if Z: <do something with Z> # Z is known to be either X or Y
Of course, there is no evaluation short-circuiting. Rob Cliffe
On 2009-10-27 18:07 PM, geremy condra wrote:
On Tue, Oct 27, 2009 at 6:46 PM, Georg Brandlg.email@example.com wrote:
Sturla Molden schrieb:
Why does Python have a bitwise but not a logical xor operator?
How often do you need the xor operator?
- Technically, an operator is *never* needed, as its just syntactic
sugar. 2) It sure would make crypto code look prettier, as we rely on xor operations extensively.
No, it wouldn't. Crypto uses the bitwise xor which we already have an operator for: ^.
As I stated in the referenced thread, to me, the most compelling reason there is no "xor" keyword to go with "and" and "or" is that one cannot make an xor that shares the same short-circuiting behavior. Or the behavior of returning one of the operand objects rather than a coerced bool. Without either of those behaviors, there is little benefit to having a keyword operator where a trivial one-liner will suffice.
-- 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
Python-ideas mailing list Pythonfirstname.lastname@example.org http://mail.python.org/mailman/listinfo/python-ideas