and, or, and not logical operators, and it has & (and), | (or), ~ (not), and ^ (xor) bitwise operators, but no logical xor. However, since you can pass any object to bool() and get back a boolean (True, False), and booleans are automatically convertable to integers (1, 0), the bitwise operators work on booleans as well:>>> True ^ True False >>> True ^ False True >>> False ^ False False >>>
However, if testing things that are not actually booleans or integers, you need to wrap them in bool() first:
>>> "foo" ^ None Traceback (most recent call last): File "", line 1, in ? TypeError: unsupported operand type(s) for ^: 'str' and 'NoneType' >>> bool("foo") ^ bool(None) True
Updated 2006-09-14. I realized you could also use is not with booleans to get an xor operator:
>>> True is not True False >>> True is not False True >>> False is not False False
This seems more Pythonic. As with ^, non-booleans must be wrapped with bool():
>>> bool("foo") is not bool(None)
True
>>> bool("foo") is not bool("bar")
False
1 comment:
Thanks for the tip! Note on using 'is not' instead of ^, if you want to compare more than two items you need to use parens. You don't have to using ^
>>> True ^ False ^ False
True
>>> True is not False is not False
False
oops. Do this:
>>> (True is not False) is not False
True
That's better.
Post a Comment