Re: Python 2.4 removes None data type?
Warren Postma [EMAIL PROTECTED] writes: [EMAIL PROTECTED] wrote: I just read in the 'What's New in Python 2.4' document that the None data type was converted to a constant: http://python.org/doc/2.4/whatsnew/node15.html Implication: A long standing wart in Python now gone. Its time to gloat. Are there any really evil glitches LEFT in Python? Python 2.4 (#1, Dec 1 2004, 14:23:15) [GCC 3.2.3] on linux2 Type help, copyright, credits or license for more information. True, False = False, True True False -- http://mail.python.org/mailman/listinfo/python-list
Re: Python 2.4 removes None data type?
Jacek Generowicz napisa(a): Implication: A long standing wart in Python now gone. Its time to gloat. Are there any really evil glitches LEFT in Python? Python 2.4 (#1, Dec 1 2004, 14:23:15) [GCC 3.2.3] on linux2 Type help, copyright, credits or license for more information. True, False = False, True True False Ugh, today I've found this in some legacy code (yes, there *is* legacy code in Python). And I will not touch this module until such syntax become illegal. -- Jarek Zgoda http://jpa.berlios.de/ | http://www.zgodowie.org/ -- http://mail.python.org/mailman/listinfo/python-list
Re: Python 2.4 removes None data type?
Michael Hoffman wrote: The fact that True and False are not constants? Yowza. a = True b = False False = a True = b if (1==2)==True: print Doom -- http://mail.python.org/mailman/listinfo/python-list
Re: Python 2.4 removes None data type?
Michael Hoffman wrote: The fact that True and False are not constants? Yowza. a = True b = False False = a True = b if (1==2)==True: print Doom -- http://mail.python.org/mailman/listinfo/python-list
Re: Python 2.4 removes None data type?
Warren Postma wrote: Michael Hoffman wrote: The fact that True and False are not constants? Yowza. a = True b = False False = a True = b if (1==2)==True: print Doom Why stop there when you can really cause some doom: py import __builtin__ as bltin py bltin.True, bltin.False = bltin.False, bltin.True As an example of what doom this causes, try typing it at the interactive prompt, and then see if you can enter anything else. I can't -- the prompt just locks up. Woo-hoo! Another way to shoot myself (and my users) in the foot! =) STeVe -- http://mail.python.org/mailman/listinfo/python-list
Re: Python 2.4 removes None data type?
Steven Bethard said unto the world upon 2005-03-07 11:55: Warren Postma wrote: Michael Hoffman wrote: The fact that True and False are not constants? Yowza. a = True b = False False = a True = b if (1==2)==True: print Doom Why stop there when you can really cause some doom: py import __builtin__ as bltin py bltin.True, bltin.False = bltin.False, bltin.True As an example of what doom this causes, try typing it at the interactive prompt, and then see if you can enter anything else. I can't -- the prompt just locks up. Woo-hoo! Another way to shoot myself (and my users) in the foot! =) STeVe Hi all, just tried this in IDLE: IDLE 1.1 import __builtin__ as bltin bltin.True, bltin.False = bltin.False, bltin.True RESTART The restart was done by IDLE itself -- poor thing just gave up. So, it looks like Steve has found a `commit suicide' command for an IDLE shell :-) Best to all, Brian vdB -- http://mail.python.org/mailman/listinfo/python-list
Re: Python 2.4 removes None data type?
[EMAIL PROTECTED] wrote: Sheesh... I didn't actually pull the type(None) comparison out of my code. Sheesh yourself. Newsgroup readers can't do inspect.hasaclue('J. Random Poster'); they rely on duck-typing or goose-typing. I was simply throwing together a possible situation. Had I thought about it for more than a second I would have remembered how I would actually use it. Indeed. -- http://mail.python.org/mailman/listinfo/python-list
Re: Python 2.4 removes None data type?
[EMAIL PROTECTED] I just read in the 'What's New in Python 2.4' document that the None data type was converted to a constant: http://python.org/doc/2.4/whatsnew/node15.html # None is now a constant; code that binds a new value to the name None is now a syntax error. So, what's the implications of this? No implications, for any sane code. You can no longer do things like this: None = 2 SyntaxError: assignment to None That's all. I find the lack of explanation a little puzzling, since I've written code that compares a variable's type with the 'None' type. For example, a variable would be initialized to 'None' and if it went through a loop unchanged, I could determine this at the end by using a conditional type(var) == type(None). Python's None is a singleton, meaning that there is a single, unique instance of type type(None). So in the case you describe, it's correct, and idiomatic, to test if var is None: instead. Checking type(var) against type(None) will still work, but was never the best way to do it. If you have an expression like var = None that's fine. You're not changing the binding of name None there, you're changing the binding of name var. What will type(None) return now? That hasn't changed: type(None) type 'NoneType' -- http://mail.python.org/mailman/listinfo/python-list
Re: Python 2.4 removes None data type?
In article [EMAIL PROTECTED], [EMAIL PROTECTED] [EMAIL PROTECTED] wrote: I just read in the 'What's New in Python 2.4' document that the None data type was converted to a constant: http://python.org/doc/2.4/whatsnew/node15.html # None is now a constant; code that binds a new value to the name None is now a syntax error. So, what's the implications of this? I find the lack of explanation a little puzzling, since I've written code that compares a variable's type with the 'None' type. For example, a variable would be initialized to 'None' and if it went through a loop unchanged, I could determine this at the end by using a conditional type(var) == type(None). What will type(None) return now? Empirically, NoneType, same as before. The change you refer to is to prevent the user from doing silly things like: == Python 2.3.4 (#1, Feb 8 2005, 13:07:40) [GCC 3.3.3 (NetBSD nb3 20040520)] on netbsd2 Type help, copyright, credits or license for more information. type(None) type 'NoneType' None=fred stdin:1: SyntaxWarning: assignment to None None 'fred' type(None) type 'str' == Python 2.4 (#1, Mar 4 2005, 16:55:16) [GCC 3.3.3 (NetBSD nb3 20040520)] on netbsd2 Type help, copyright, credits or license for more information. type(None) type 'NoneType' None=Fred SyntaxError: assignment to None type(None) type 'NoneType' == So your idiom should still work. Note that since there is only one NoneType instance (i.e. None), you can just test for var is None and save yourself some work. Gary Duzan BBN Technologies -- http://mail.python.org/mailman/listinfo/python-list
Re: Python 2.4 removes None data type?
Warren Postma wrote: [EMAIL PROTECTED] wrote: I just read in the 'What's New in Python 2.4' document that the None data type was converted to a constant: http://python.org/doc/2.4/whatsnew/node15.html Implication: A long standing wart in Python now gone. Its time to gloat. Are there any really evil glitches LEFT in Python? Now go look at Perl and come back and say Thank-deity-of-my-choice-I'm-using-Python. Remaining warts that won't disappear: print file, stuff @decorator regards Steve -- Meet the Python developers and your c.l.py favorites March 23-25 Come to PyCon DC 2005 http://www.pycon.org/ Steve Holden http://www.holdenweb.com/ -- http://mail.python.org/mailman/listinfo/python-list
Re: Python 2.4 removes None data type?
In article [EMAIL PROTECTED], [EMAIL PROTECTED] [EMAIL PROTECTED] wrote: I just read in the 'What's New in Python 2.4' document that the None data type was converted to a constant: http://python.org/doc/2.4/whatsnew/node15.html # None is now a constant; code that binds a new value to the name None is now a syntax error. So, what's the implications of this? I find the lack of explanation a little puzzling, since I've written code that compares a variable's type with the 'None' type. For example, a variable would be initialized to 'None' and if it went through a loop unchanged, I could determine this at the end by using a conditional type(var) == type(None). What will type(None) return now? Just out of curiosity, *why* did you test against type(None). What did it buy you compared to the simpler var == None'? In any case, it looks like it does the right thing: Python 2.4 (#1, Jan 17 2005, 14:59:14) [GCC 3.3.3 (NetBSD nb3 20040520)] on netbsd2 Type help, copyright, credits or license for more information. type (None) type 'NoneType' -- http://mail.python.org/mailman/listinfo/python-list
Re: Python 2.4 removes None data type?
[EMAIL PROTECTED] wrote: I just read in the 'What's New in Python 2.4' document that the None data type was converted to a constant: http://python.org/doc/2.4/whatsnew/node15.html # None is now a constant; code that binds a new value to the name None is now a syntax error. So, what's the implications of this? Relax. The sky is not falling. I find the lack of explanation a little puzzling, since I've written code that compares a variable's type with the 'None' type. It is saying that if you had been silly enough to do None = fubar you will now get a syntax error. It said absolutely nothing about removes None data type. There are (at least) two possible reasons for a lack of explanation: (1) Python is one of those expensive software products that hit you with upgrades where you have difficulty finding about the changes in advance (let alone participarting in the design process) and require you to recode large chunks of your application but you can't find out with any sort of precision the necessary changes might be from the vague descriptions on a complex and ever-changing website. (2) Unless you have done something completely idiotic [which the change is designed to prevent], no change is required to your code. OR, like for the changes to integer division, the change is announced for a future version, you can do from __future__ inport whatever. Any furore (and there have been some doozies) noticeable in the newsgroup is part of the design process, and has died down well before the changes are released. Which do you think is more likely? For example, a variable would be initialized to 'None' and if it went through a loop unchanged, I could determine this at the end by using a conditional type(var) == type(None). or by var == None or var is None What will type(None) return now? Constants have types. What made you think that its type would change? -- http://mail.python.org/mailman/listinfo/python-list