[Python-ideas] Changing the meaning of bool.__invert__

Steven D'Aprano steve at pearwood.info
Thu Apr 7 21:53:44 EDT 2016

On Thu, Apr 07, 2016 at 01:17:57PM +0000, Antoine Pitrou wrote:
> Steven D'Aprano <steve at ...> writes:
> > 
> > > Numpy's boolean type does the more useful (and more expected) thing:
> > > 
> > > >>> ~np.bool_(True)
> > > False
> > 
> > Expected by whom?
> By anyone who takes booleans at face value (that is, takes booleans as
> representing a truth value and expects operations on booleans to reflect
> the semantics of useful operations on truth values, not some arbitrary
> side-effect of the internal representation of a boolean...).

Bools in Python have *always* been integers, so who are these people 
taking booleans at face value? Beginners? If so, say so. That's a motive 
I can understand.

But I think that people who expect bools to be real truth values, like 
in Pascal, probably won't expect BITWISE operations to operate on them 
at all and will use the BOOLEAN operators and, or, not. Bitwise 
operators operate on a sequence of bits, not a single truth value. What 
do these naive "bools are truth values" people think:

True << 3 

should return?

I don't think we need a second way to spell "not bool". Bools have 
always been ints in Python, and apart from their fancy string 
representation they behave like ints. I don't think it helps to make ~ a 
special case where they don't.

> But I'm not surprised by such armchair commenting and pointless controversy
> on python-ideas, since that's what the list is for....

Thanks for your feedback, I'll give it the due consideration it 


More information about the Python-ideas mailing list