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