Reinhold Birkenfeld <reinhold-birkenfeld-nospam at wolke7.net> writes: > David Wilson wrote: >> For the most part, CPython performs few optimisations by itself. You >> may be interested in psyco, which performs several heavy optimisations >> on running Python code. >> >> http://psyco.sf.net/ >> >> Defining a function inside a loop in CPython will cause a new function >> object to be created each and every time the loop runs. No such >> automatic optimisation is performed there. For the most part, this lack >> of opimisation not only simplifies the CPython implementation, but also >> causes code to act much more closely to how it was defined, which is >> good for new and advanced users alike. > > More importantly, since Python supports lexical scopes, a function defined > in a loop could be different each time it is defined, e.g. > > def getadders(to): > for i in range(to): > def adder(amount): > return i + amount > yield adder Hehe. Dangerous code. >>> def getadders(to): ... for i in range(to): ... def adder(amount): ... return i + amount ... yield adder ... >>> >>> for f in getadders(3): ... print f(42) ... 42 43 44 >>> Seems to work. But observe this: >>> def getadders(to): ... for i in range(to): ... def adder(amount): ... return i + amount ... yield adder ... >>> >>> funcs = [x for x in getadders(3)] >>> for f in funcs: ... print f(42) ... 44 44 44 >>> Thomas
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