"Paddy" wrote: > I played around a bit. The following is a 'borg' version in that there > is only one counter shared between all calls of the outer function: > >>>> def fun_borg_var(initial_val=0): > ... def borg_var_inc(x=1): > ... fun_borg_var._n += x
a drawback with the function attribute approach compared to a real closure is that the function is no longer a self-contained callable: def fun_borg_var(initial_val=0): def borg_var_inc(x=1): fun_borg_var._n += x return fun_borg_var._n def borg_var_dec(x=1): fun_borg_var._n -= x return fun_borg_var._n try: fun_borg_var._n = fun_borg_var._n except: fun_borg_var._n = initial_val return (borg_var_inc, borg_var_dec) up1, dn1 = fun_borg_var() del fun_borg_var # won't need this any more print up1() # oops! so you might as well use a good old global variable, and initialize it as usual. </F> -- http://mail.python.org/mailman/listinfo/python-list