[Python-Dev] PEP 550 v4
Greg Ewing
greg.ewing at canterbury.ac.nz
Wed Sep 6 20:00:39 EDT 2017
Nathaniel Smith wrote:
> Literally the first motivating example at the beginning of the PEP
> ('def fractions ...') involves only generators, not coroutines, and
> only works correctly if generators get special handling. (In fact, I'd
> be curious to see how Greg's {push,pop}_local_storage could handle
> this case.)
I've given a decimal-based example, but it was a bit
scattered. Here's a summary and application to the
fractions example.
I'm going to assume that the decimal module has been
modified to keep the current context in a context var,
and that getcontext() and setcontext() access that
context var.
THe decimal.localcontext context manager is also
redefined as:
class localcontext():
def __enter__(self):
push_local_context()
ctx = getcontext().copy()
setcontext(ctx)
return ctx
def __exit__(self):
pop_local_context()
Now we can write the fractions generator as:
def fractions(precision, x, y):
with decimal.localcontext() as ctx:
ctx.prec = precision
yield Decimal(x) / Decimal(y)
yield Decimal(x) / Decimal(y ** 2)
You may notice that this is exactly the same as
what you would write today for the same task...
--
Greg
More information about the Python-Dev
mailing list