I just submitted http://python.org/sf/1501934 and assigned it to Neal so it doesn't get forgotten before 2.5 goes out ;) It seems Python 2.5 compiles the following code incorrectly: >>> g = 1 >>> def f1(): ... g += 1 ... >>> f1() >>> g 2 It looks like the compiler is not seeing augmented assignment as creating a local name, as this fails properly: >>> def f2(): ... g += 1 ... g = 5 ... >>> f2() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 2, in f2 UnboundLocalError: local variable 'g' referenced before assignment The dis.dis output confirms this: >>> dis.dis(f1) 1 0 LOAD_GLOBAL 0 (g) 3 LOAD_CONST 1 (1) 6 INPLACE_ADD 7 STORE_GLOBAL 0 (g) 10 LOAD_CONST 0 (None) 13 RETURN_VALUE If anyone feels like fixing it and happens to remember where the new compiler does the fast-locals optimization (I recall a few people were working on extra optimizations and all), please do :-) (I can probably look at it before 2.5 if no one else does, though.) It may be a good idea to check for more such cornercases while we're at it (but I couldn't find any in the fast-locals bit.) -- Thomas Wouters <thomas at python.org> Hi! I'm a .signature virus! copy me into your .signature file to help me spread! -------------- next part -------------- An HTML attachment was scrubbed... URL: http://mail.python.org/pipermail/python-dev/attachments/20060607/d79597bd/attachment.html
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4