[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