In Python 2, we could reassign True
and False
(but not None
), but all three (True
, False
, and None
) were considered builtin variables. However, in Py3k all three were changed into keywords as per the docs.
From my own speculation, I could only guess that it was to prevent shenanigans like this which derive from the old True, False = False, True
prank. However, in Python 2.7.5, and perhaps before, statements such as None = 3
which reassigned None
raised SyntaxError: cannot assign to None
.
Semantically, I don't believe True
, False
, and None
are keywords, since they are at last semantically literals, which is what Java has done. I checked PEP 0 (the index) and I couldn't find a PEP explaining why they were changed.
Are there performance benefits or other reasons for making them keywords as opposed to literals or special-casing them like None
in python2?
The True keyword is used as the Boolean true value in Python code. The Python keyword False is similar to the True keyword, but with the opposite Boolean value of false. In other programming languages, you'll see these keywords written in lowercase ( true and false ), but in Python they are always written in uppercase.
However, in Python 2.7. 5, and perhaps before, statements such as None = 3 which reassigned None raised SyntaxError: cannot assign to None . Semantically, I don't believe True , False , and None are keywords, since they are at last semantically literals, which is what Java has done.
If you test True=+2 or True=1 or False=0.4575 or False=-999 in VB, they will all return false. In Python: same idea, different specifics. Nothing mysterious about 2 != True .
Possibly because Python 2.6 not only allowed True = False
but also allowed you to say funny things like:
__builtin__.True = False
which would reset True
to False
for the entire process. It can lead to really funny things happening:
>>> import __builtin__ >>> __builtin__.True = False >>> True False >>> False False >>> __builtin__.False = True >>> True False >>> False False
EDIT: As pointed out by Mike, the Python wiki also states the following under Core Language Changes:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With