[Python-Dev] PEP 342: simple example, closure alternative
Andrew Koenig
ark at acm.org
Fri Aug 26 05:18:43 CEST 2005
> A closure based accumulator (using Scheme):
>
> (define (accum n)
> (lambda (incr)
> (set! n (+ n incr))
> n))
> (define s (accum 0))
> (s 1) ; -> 1 == 0+1
> (s 5) ; -> 6 == 1+5
>
> So I thought the generator version might look like:
>
> def accum(n):
> while 1:
> incr = (yield n) or 0
> n += incr
Maybe I'm missing something but this example seems needlessly tricky to me.
How about doing it this way?
def accum(n):
acc = [n]
def f(incr):
acc[0] += incr
return acc[0]
return f
Here, the [0] turns "read-only" access into write access to a list element.
The list itself isn't written; only its element is.
More information about the Python-Dev
mailing list