On Sun, Jan 18, 2015 at 4:30 AM, Albert van der Horst <alb...@spenarnc.xs4all.nl> wrote: > The proper technique is make the global local to the normal subroutine, > then make the subroutine with those parameters you don't want to see > also local to that subroutine. > E.g. > > def fib(n): > ' return the n-th Fibonacci number ' > a,b = 0,1 > def fib1(ap,bp): > ' for f_n,f_n+1, return f_n+1,f_n+2 ' > return bp,ap+b > for i in xrange(n): > a,b = fib1(a,b) > return a
That's a fairly useless use of a nested function... you could in-line it without any effort at all: def fib(n): a,b = 0,1 for i in xrange(n): a,b = b,a+b return a Even in the OP's example, where the inner function needs to call itself recursively, it doesn't need to be a closure; a simple out-of-line helper function does work (and has already been suggested; Gregory was, I think, first). In my opinion, it's not materially different from having an argument with a default. ChrisA -- https://mail.python.org/mailman/listinfo/python-list