Those of you who were at the clinic last night know that I
was asking for help on a weird limitation of Python.

The problem:  Consider the function, foo(), in this C program.

        #include <stdio.h>

        int foo()
        {
            static int n = 0;
            return ++n;
        }

        main()
        {
            int n1 = foo();
            int n2 = foo();
            printf("%d %d\n", n1, n2);
            return 0;
        }

It keeps state around between calls, but does not have extra names in
any nonlocal namespaces.

How would you write a function in Python that does the same?
(Note, I don't want a solution that only returns successive numbers.
I might use this to return successive lines of a file or calculate
successive permutations of a sequence or whatever.)

The solution: For some reason, this apparently simple problem doesn't
have any good solutions (that I'm aware of).  Here's the best I can
do.

        def foo():
            n = [0]
            def bar():
                n[0] += 1
                return n[0]
            return bar
        foo = foo()

That reuses the single global name, foo.  First, foo holds a function
that returns the function we need.  Then we set foo to the returned
function.  The original function is not accessible, AFAIK.

-- 
Bob Miller                              K<bob>
kbobsoft software consulting
http://kbobsoft.com                     [EMAIL PROTECTED]
_______________________________________________
Eug-LUG mailing list
[EMAIL PROTECTED]
http://mailman.efn.org/cgi-bin/listinfo/eug-lug

Reply via email to