Ethan Furman wrote:
  and returns the last object that is "true"
A little suspect this.
_and_ returns the first object that is not "true," or the last object.
  or  returns the first object that is "true"
Similarly:
_or_ returns the first object that is "true," or the last object.

so should xor return the only object that is "true", else False/None?

Xor has the problem that in two cases it can return neither of its args.
Not has behavior similar in those cases, and we see it returns False or
True.  The Pythonic solution is therefore to use False.

def xor(a, b)
    if a and b:
        return None
    elif a:
        return a
    elif b:
        return b
    else:
        return None

    def xor(a, b):
        if bool(a) == bool(b):
            return False
        else:
            return a or b

Side-effect counting in applications of bool(x) is ignored here.
If minimizing side-effects is needed:

    def xor(a, b):
        if a:
            if not b:
                return a
        elif b:
            return b
        return False

--Scott David Daniels
scott.dani...@acm.org
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to