bool behavior in Python 3000?

Steven Bethard steven.bethard at gmail.com
Tue Jul 10 19:47:47 EDT 2007


Steven D'Aprano wrote:
> On Tue, 10 Jul 2007 13:13:38 -0600, Steven Bethard wrote:
> 
>> It's much easier to explain to newcomers that *, + and - work on True 
>> and False as if they were 1 and 0 than it is to introduce them to a two 
>> element boolean algebra. So making this kind of change needs a pretty 
>> strong motivation from real-world code.
> 
> Pretending that False and True are just "magic names" for 0 and 1 might be
> "easier" than real boolean algebra, but that puts the cart before the
> horse. Functionality comes first: Python has lists and dicts and sets
> despite them not being ints, and somehow newcomers cope. I'm sure they
> will cope with False and True not being integers either.
> 
> I mean, really, does anyone *expect* True+True to give 2, or that 2**True
> even works, without having learnt that Python bools are ints? I doubt it.
> 
> And the old Python idiom for an if...then...else expression:
> 
> ["something", "or other"][True]
> 
> tends to come as a great surprise to most newbies. So I would argue that
> bools being ints is more surprising than the opposite would be.

I disagree. I think you'd get just as many odd stares if:

     True + True == True

But I think all you're really saying is that newbies don't expect things 
like +, -, *, etc. to work with bools at all. Which I agree is probably 
true.

So it seems like you're really arguing for raising exceptions in all 
these situations. That would actually be fine with me since I never use 
bools as ints, but I suspect getting it past python-dev will be an 
uphill battle since it will break large chunks of code.

STeVe



More information about the Python-list mailing list