Assignment Operators?
Grant Edwards
invalid at invalid.invalid
Thu Oct 2 10:23:07 EDT 2014
On 2014-10-02, Chris Angelico <rosuav at gmail.com> wrote:
> On Thu, Oct 2, 2014 at 11:24 PM, Didymus <lynto28 at gmail.com> wrote:
>>>>> errors = False
>>>>> errors |= 3
>>>>> errors
>> 3
>>>>> errors |= 4
>>>>> errors
>> 7
[...]
> When you use False there, it's equivalent to zero.
Why is that, you ask? [Or should, anyway]
The fact that booleans when found in an arithmetic context are
auto-magically coerced into integers with values 0,1 is a rather
unpythonic wart which has it's historical roots in the time when
Python didn't have a boolean type. People used integers instead and a
lot of code bound the names True and False to the integers 1 and 0.
When the boolean type was introduced it was decided that backwards
compatibility with that practice was important. This resulted in two
pragmatic but somewhat "impure" decisions:
1) In Python 2, True and False are not keywords, they're just global
keywords that come pre-bound to the boolean singleton values of
'true' and 'false'. You can re-bind them to other objects:
Python 2.7.7 (default, Aug 20 2014, 11:41:28)
>>> False = 3.14159
>>> if False: print "False"
...
False
>>>
>>> import math
>>> math.cos(False)
-0.9999999999964793
2) When used in an arithmetic context, boolean values would be
converted into integer values 0,1.
When Python 3 came out, 1) was dropped and True/False were "promoted"
to keywords. But, 2) is still the case.
--
Grant Edwards grant.b.edwards Yow! I guess you guys got
at BIG MUSCLES from doing too
gmail.com much STUDYING!
More information about the Python-list
mailing list