missing 'xor' Boolean operator
Ethan Furman
ethan at stoneleaf.us
Tue Jul 14 18:11:40 EDT 2009
MRAB wrote:
> Ethan Furman wrote:
>
>> Robert Kern wrote:
>>
>>> On 2009-07-14 14:56, Dr. Phillip M. Feldman wrote:
>>>
>>>> != does do what I want, except that it doesn't indicate to someone
>>>> reading
>>>> the code that the operands are being treated as logicals.
>>>> (Readability is
>>>> supposed to be one of the major selling points of Python). But,
>>>> this is
>>>> probably good enough.
>>>
>>>
>>>
>>> In the words of those greater than myself, "Not every one-liner needs
>>> to be in the standard library."
>>>
>>> def xor(a, b):
>>> return bool(a) != bool(b)
>>>
>>
>> Let's see...
>>
>> and returns the last object that is "true"
>> or returns the first object that is "true"
>>
>> so should xor return the only object that is "true", else False/None?
>>
>> def xor(a, b)
>> if a and b:
>> return None
>> elif a:
>> return a
>> elif b:
>> return b
>> else:
>> return None
>>
> How about:
>
> def xor(a, b):
> return not b and a or not a and b
In [12]: not 1 and 0 or 1 and not 0
Out[12]: True
In [13]: not 0 and 0 or 0 and not 0
Out[13]: 0
In [14]: not 1 and 1 or 1 and not 1
Out[14]: False
In [15]: not [] and [] or [] and not []
Out[15]: []
Doesn't produce consistent objects, sometimes bool, sometimes something
else. 'Course, it all depends on what you need.
~Ethan~
More information about the Python-list
mailing list