On Tue, Feb 11, 2003 at 02:33:45PM +0100, Alex Martelli wrote: > > def setdefault(adict, akey, ?avalue): > if akey not in adict: > adict[akey] = evaluate_now(avalue) > return adict[akey] > > to be called as, e.g. > > setdefault(mydict, 'goo', ?makeavalue(x)) > > this would use ? for both formal and actual arguments to > mean lazy evaluation, and a new builtin to force the time > of evaluation. Other choices are, of course, possible. +0.5 when nobody is looking I smirk at the fact that tcl has a feature python doesn't ;-) (well, not really... it could be argued our lambda does the same thing better) Instead of a new builtin, I think the "lazy evaluation block" should be an object; you can then call a method, in your example avalue.eval() What happens if you don't add the ? to the call? setdefault(mydict, 'foo', v) IMHO it would still build a "lazy evaluation block" but somehow "already evaluated". One more important bit: what happens if you call .eval() multiple times? Do each one result in a new evaluation, or is the result cached internally? I can see use cases for both. Perhaps ruling that each .eval() re-evaluates the block works - then if you want to avoid it, just assign the result to a local variable (explicit). OTOH, off the top of my head I can't think of another valid use case for this whole feature other than setdefault. []s, |alo +---- -- Those who trade freedom for security lose both and deserve neither. -- http://www.laranja.org/ mailto:lalo@laranja.org pgp key: http://www.laranja.org/pessoal/pgp Eu jogo RPG! (I play RPG) http://www.eujogorpg.com.br/ GNU: never give up freedom http://www.gnu.org/
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4