Phillip J. Eby wrote: > At 02:10 PM 8/25/2005 -0500, Ian Bicking wrote: > >>I was trying to translate a pattern that uses closures in a language >>like Scheme (where closed values can be written to) to generators using >>PEP 342, but I'm not clear exactly how it works; the examples in the PEP >>have different motivations. Since I can't actually run these examples, >>perhaps someone could confirm or debug these: >> >>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
Bah, I don't know why this had me so confused. Well, I kind of know why. So maybe this example would be better written: def accum(n): incr = yield # wait to get the first incr to be sent in while 1: n += incr incr = yield n # return the new value, wait for next incr This way it is more explicit all around -- the first call to .next() is just setup, kind of like __init__ in an object, except it has to be explicitly invoked. -- Ian Bicking / [EMAIL PROTECTED] / http://blog.ianbicking.org _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com