Silly questions about True and False
Steve Holden
steve at holdenweb.com
Mon Dec 20 14:00:34 EST 2004
More information about the Python-list mailing list
Mon Dec 20 14:00:34 EST 2004
- Previous message (by thread): Silly questions about True and False
- Next message (by thread): Silly questions about True and False
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Peter Hansen wrote: > drs wrote: > >> I just upgraded my Python install, and for the first time have True and >> False rather than 1 and 0. I was playing around at the command line >> to test >> how they work (for instance, "if 9:" and "if True:" both lead to the >> conditional being executed, but True == 9 -> False, that this would be >> true >> was not obvious to me -- "True is True" is True, while "9 is True" is >> false >> even though 9 evaluates to True.) > > > What do you mean by "9 evalutes to True"? That's not the > case. bool(9) does evaluate to True, and that's effectively > what "if 9:" is doing... > > Anyhow, in doing my tests, I accidentally > >> typed >> >> >>>>> False = 0 >> >> rather than >> >>>>> False == 0 >> >> >> and I lost the False statement. > I should point out a terminological inexactitude here: False is not a statement, it's an identifier. As Peter pointed out, that identifier can exist in several different namespaces, leading to your initial confusion. > > To get it back, you should do "del False". Remarkably, > this actually just removes the local name False that > you created which was "shadowing" the builtin name, > allowing the builtin name (which you didn't change) > to be seen again. > > Note that this name you are creating is actually *local* > to the module you are in, which at the interactive > prompt is called __main__. Thus you are not changing > False from the point of view of any other module, or > of the Python internals. They are (for the most part) > still getting it from the builtin module. > > >> which seems to put False back to False, but this seems weird. >> >>>>> 1 = 0 >> >> >> throws an error (can't assign to literal), why doesn't False = 0 throw >> the >> same error? > > > False is not a constant, it's merely a name. 1 and 0 are > constants. You can't change a constant, but you *can* > "rebind" a name (that is, attach it to something else). > That's all you're doing here. > Note, however, that the 2.4 documentation does actually list True and False as constants (along with None) in section 2.5 of the Library Reference manual. >> Also, why doesn't False = 0 make >> >>>>> 1 == 2 >> >> 0 >> Instead of False? > > > Because such comparisons are all effectively doing a bool() > which continues to return the builtin False. > Sadly, the builtin False and True can actually be overwritten (unlike None, which starting from 2.4 really *is* a constant): $ python Python 2.4 (#1, Dec 4 2004, 20:10:33) [GCC 3.3.3 (cygwin special)] on cygwin Type "help", "copyright", "credits" or "license" for more information. >>> None = 42 SyntaxError: assignment to None >>> True = 33 >>> True 33 >>> __builtins__.True True >>> __builtins__.True = 42 >>> True 33 >>> del True >>> True 42 >>> Of course, even though you can change True's value, you can't make a comparison return __builtins__.True: >>> None is None True >>> (None is None) + 1 2 >>> Here the comparison is returning the Python object to which __builtins__.True initially refers. when-i-tell-you-three-times-it-is-forty-true-ly y'rs - steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119
- Previous message (by thread): Silly questions about True and False
- Next message (by thread): Silly questions about True and False
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list