[Python-Dev] Scope object (Re: nonlocals() function?) (original) (raw)

Cesare Di Mauro cesare.di.mauro at gmail.com
Tue Apr 6 08:25:08 CEST 2010


2010/4/6 Antoine Pitrou <solipsis at pitrou.net>

Greg Ewing <greg.ewing canterbury.ac.nz> writes: > > Maybe it would be better to deprecate globals() and locals() > and replace them with another function called something like > scope().

It is useful to distinguish between globals (i.e., module-level variables) and locals, so replacing them with scope() would not be better IMO. > It would return a mapping object that looks up > names in the current scope. It could also improve on locals() > by being writable. If you can prove that making locals() (or its replacement) writable doesn't complicate the interpreter core too much, then why not. Otherwise -1 :-) Regards Antoine.

It will certainly. There's MUCH that can be optimized to let CPython squeeze more performance from static analysis (even a gross one) on locals.

Example:

def f(): a = 1 b = 2 return a + b

can be reduced to something similar to:

def f(): a = 1 b = 2 return 3

and, more aggressively, like:

def f(): return 3

They are just "dummy" examples, but can make it clear how far optimizations can go with static analysis on locals. Python is a language that make it possible to use such analysis at compile time, and I think it is a very good thing.

Obviously the last example brings questions regards the language semantic: is it right to suppress "unused" or "not useful" local variables? A "conservative" answer will be clearly NO. But I hope that a future language specification will fix some aspects, putting clear what you can expect from the language itself, and what is closet to the implementation.

Cesare -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.python.org/pipermail/python-dev/attachments/20100406/8ea778e5/attachment.html>



More information about the Python-Dev mailing list