New submission from Lee June: hi, all. my friend found a strange behave with 'global', I posted it in the '[EMAIL PROTECTED]' as this: [quote] why the following 2 prg give different results? a.py is ok, but b.py is 'undefiend a' I am using Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit (Intel)] on win32 #a.py def run(): if 1==2: # note, it always False global a a=1
run() a #b.py def run(): a=1 run() a [/quote] I believe that is bug which breaks the consistency of python syntax and common english langauge sense- just like we can do '1>None' in python2.x, but not in python 3.x. So please fix this bug. If you do think that is the feature of python and refuse to fix it, please at least mention the craziness in the document. Uhm, maybe I can do the later, but I don't think it is good. btw, there are some replies(you can search them in the archive), I think the other users met more questions, for example From: "Gabriel Genellina" <[EMAIL PROTECTED]> To: [EMAIL PROTECTED] Date: Mon, 21 Jan 2008 18:36:19 -0200 Subject: Re: problem with 'global' En Mon, 21 Jan 2008 17:36:29 -0200, Duncan Booth <[EMAIL PROTECTED]> escribi?: > Marc 'BlackJack' Rintsch <[EMAIL PROTECTED]> wrote: > >> On Mon, 21 Jan 2008 17:08:46 -0200, Gabriel Genellina wrote: >> >>> The future statement is another example, even worse: >>> >>> if 0: >>> from __future__ import with_statement >>> >>> with open("xxx") as f: >>> print f >> >> In Python >=2.5 it's a compile time error if that import is not the very >> first statement in a source file. >> > That doesn't appear to be the case. With Python 2.5.1 the example > Gabriel quoted will compile and run. Yes, but now I've noticed that the 0 has some magic. The code above works with 0, 0.0, 0j and ''. Using None, False, () or [] as the condition, will trigger the (expected) syntax error. Mmm, it may be the peephole optimizer, eliminating the dead branch. This function has an empty body: def f(): if 0: print "0" if 0.0: print "0.0" if 0j: print "0j" if '': print "empty" py> dis.dis(f) 5 0 LOAD_CONST 0 (None) 3 RETURN_VALUE The other false values tested (False, None, () and []) aren't optimized out. -- Gabriel Genellina ---------- components: Interpreter Core messages: 61482 nosy: oyster severity: major status: open title: strange 'global' type: behavior versions: Python 2.4, Python 2.5 __________________________________ Tracker <[EMAIL PROTECTED]> <http://bugs.python.org/issue1888> __________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com