There's an analysis of the topic at developerworks:
http://www-106.ibm.com/developerworks/linux/library/l-pycon?t=grl,l=252,p=iterators

On (10/04/02 08:41), Bob Miller wrote:
> 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>
_______________________________________________
Eug-LUG mailing list
[EMAIL PROTECTED]
http://mailman.efn.org/cgi-bin/listinfo/eug-lug

Reply via email to