| Store | Cart

Turn of globals in a function?

From: Ron_Adam <rad...@tampabay.rr.com>
Sun, 27 Mar 2005 16:45:19 GMT
On 26 Mar 2005 22:51:14 -0800, oren at REMOVETHIS1.hishome.net (Oren
Tirosh) wrote:

>Ron_Adam <radam2 at tampabay.rr.com> wrote in message news:<6qeb415iqqsor4biebk6rqj9g6jv3lpt55 at 4ax.com>...>> Is there a way to hide global names from a function or class?>> >> I want to be sure that a function doesn't use any global variables by>> mistake.  So hiding them would force a name error in the case that I>> omit an initialization step.  This might be a good way to quickly>> catch some hard to find, but easy to fix, errors in large code blocks.>>def noglobals(f):>.   import new>.   return new.function(>.       f.func_code, >.       {'__builtins__':__builtins__},>.       f.func_name, >.       f.func_defaults, >.       f.func_closure>.   )>>You can use it with the Python 2.4 @decorator syntax:>>@noglobals>def a(...):>.   # code here

Cool!  I haven't played with decorators yet. :)

I noticed the 'new' module is depreciated. It referred me to call the
object type directly instead.  So this is probably the better way.

def noglobals(f):
    return type(f)(
       f.func_closure )

def a():
    global x
    try: x
    except: x=0
    x += 1
    return x

x = 5
for n in range(10):
    print a()
print x		# x is still 5

So this is another, but longer, way to do a generator. 

>>> print type(a).__doc__
function(code, globals[, name[, argdefs[, closure]]])

Create a function object from a code object and a dictionary.
The optional name string overrides the name from the code object.
The optional argdefs tuple specifies the default argument values.
The optional closure tuple supplies the bindings for free variables.

What are 'free variables'?

And is there a way to directly read what names in a function are set
with the global statement? (Other than looking at the monitor. ;)



Recent Messages in this Thread
Ron_Adam Mar 26, 2005 08:01 pm
Michael Spencer Mar 26, 2005 08:18 pm
Bengt Richter Mar 26, 2005 09:02 pm
Ron_Adam Mar 27, 2005 02:49 am
Oren Tirosh Mar 27, 2005 06:51 am
Ron_Adam Mar 27, 2005 04:45 pm
Greg Ewing Mar 31, 2005 04:28 am
Ron_Adam Mar 31, 2005 05:31 pm
Ron_Adam Mar 27, 2005 02:13 am
Messages in this thread