Erik Max Francis wrote: > > What's the point of having Booleans, if you can't tell them from integers? > > Because > > return True > > is clearer than > > return 1 > > if the purpose of the return value is to indicate a Boolean rather than > an arbitrary integer.
the real reason booleans were added was that sillyness like True = 1 == 1 False = not True and return 1 # true and class Boolean: def __init__(self, value = 0): self.value = operator.truth(value) def __cmp__(self, other): if isinstance(other, Boolean): other = other.value return cmp(self.value, other) def __repr__(self): if self.value: return "<Boolean True at %x>" % id(self) else: return "<Boolean False at %x>" % id(self) def __int__(self): return self.value def __nonzero__(self): return self.value True, False = Boolean(1), Boolean(0) were all too common in the wild. for the full story, see http://www.python.org/peps/pep-0285.html and, to briefly return to the original topic, note that "This PEP does *not* change the fact that almost all object types can be used as truth values. For example, when used in an if statement, an empty list is false and a non-empty one is true; this does not change and there is no plan to ever change this. The only thing that changes is the preferred values to represent truth values when returned or assigned explicitly. Previously, these preferred truth values were 0 and 1; the PEP changes the preferred values to False and True, and changes built-in operations to return these preferred values." in general, returning True and False is pythonic, explicitly testing for them is not. </F> -- http://mail.python.org/mailman/listinfo/python-list