Re: accumulator generators
- From: George Sakkis <george.sakkis@xxxxxxxxx>
- Date: Sat, 31 May 2008 07:54:56 -0700 (PDT)
On May 31, 4:19 am, Arnaud Delobelle <arno...@xxxxxxxxxxxxxx> wrote:
Cameron <cameronla...@xxxxxxxxx> writes:
I was reading this <a href="thishttp://www.paulgraham.com/icad.html">Paul
Graham article</a> and he builds an accumuator generator function in
the appendix. His looks like this:
<pre>
def foo(n):
s = [n]
def bar(i):
s[0] += i
return s[0]
return bar
</pre>
Why does that work, but not this:
<pre>
def foo(n):
s = n
def bar(i):
s += i
return s
return bar
</pre>
Others have explained why, but this looks like "pythonized LISP" to
me. I would rather use a generator function:
def foo(n):
while True:
n += yield n
Although the problem is that you can't send it values the first time
round!
's'bar = foo('s')
bar.next()
'sp'bar.send('p')
bar.send('am')
'spam'
But:
bar = foo(3)
bar.send(2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't send non-None value to a just-started generator
I find the "pythonized LISP" solution more understandable, even
without the initial next() requirement. YMMV
George
.
- Follow-Ups:
- Re: accumulator generators
- From: Arnaud Delobelle
- Re: accumulator generators
- References:
- accumulator generators
- From: Cameron
- Re: accumulator generators
- From: Arnaud Delobelle
- accumulator generators
- Prev by Date: Re: How to add function return value
- Next by Date: Re: How to covert ASCII to integer in Python?
- Previous by thread: Re: accumulator generators
- Next by thread: Re: accumulator generators
- Index(es):
Relevant Pages
|