On May 17, 2005, at 11:39 PM, Guido van Rossum wrote: > [Raymond Hettinger] > >> However, for a general purpose wrapper, it is preferable to make a >> context copy and then restore the context after the enclosed is run. >> That guards against the enclosed block making any unexpected context >> changes. >> > > (Although if people get in the habit of using the provided wrappers > and the do-statement, there won't be any unexpected changes.) > > >> Also, since the wrapper is intended to work like a try/finally, it >> will >> make sure the context gets restored even if an exception is raised at >> some unexpected point in the middle of the computation. >> > > Yes, that's the point of the do-statement. :- > > Anyway, perhaps we should provide this most general template: > > @do_template > def with_decimal_context(): > oldctx = decimal.getcontext() > newctx = oldctx.copy() > decimal.setcontext(newctx) > yield newctx > decimal.setcontext(oldctx) > > To be used like this: > > do with_decimal_context() as ctx: > ctx.prec += 2 > # change other settings > # algorithm goes here
I have yet to use the decimal module much, so I may be completely off here.. but why not write it like this: @do_template def with_decimal_context(): curctx = decimal.getcontext() oldctx = curctx.copy() yield curctx decimal.setcontext(oldctx) Saves a line and a context set :) -bob _______________________________________________ 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