Re: [Python-Dev] PEP 550 v4

2017年8月28日 04:22:51 -0700

On Sun, Aug 27, 2017 at 11:19:20AM -0400, Yury Selivanov wrote:
> On Sun, Aug 27, 2017 at 6:08 AM, Stefan Krah <[email protected]> wrote:
> > On Sat, Aug 26, 2017 at 04:13:24PM -0700, Nathaniel Smith wrote:
> >> It's perfectly reasonable to have a script where you call
> >> decimal.setcontext or np.seterr somewhere at the top to set the
> >> defaults for the rest of the script.
> >
> > +100. The only thing that makes sense for decimal is to change 
> > localcontext()
> > to be automatically async-safe while preserving the rest of the semantics.
> 
> TBH Nathaniel's argument isn't entirely correct.
> 
> With the semantics defined in PEP 550 v4, you still can set decimal
> context on top of your file, in your async functions etc.
> 
> and this:
> 
> def bar():
> decimal.setcontext(ctx)
> 
> def foo():
> bar()
> # use decimal with context=ctx
Okay, so if I understand this correctly we actually will not have dynamic
scoping for regular functions: bar() has returned, so the new context
would not be found on the stack with proper dynamic scoping.
> and this:
> 
> async def bar():
> # use decimal with context=ctx
> 
> async def foo():
> decimal.setcontext(ctx)
> await bar()
> 
> The only thing that will not work, is this (ex1):
> 
> async def bar():
> decimal.setcontext(ctx)
> 
> async def foo():
> await bar()
> # use decimal with context=ctx
Here we do have dynamic scoping.
> Speaking of (ex1), there's an example that didn't work in any PEP 550 version:
> 
> def bar():
> decimal.setcontext(ctx)
> yield
> 
> async def foo():
> list(bar())
> # use decimal with context=ctx
What about this?
async def bar():
 setcontext(Context(prec=1))
 for i in range(10):
 await asyncio.sleep(1)
 yield i
async def foo():
 async for i in bar():
 # ctx.prec=1?
 print(Decimal(100) / 3)
I'm searching for some abstract model to reason about the scopes.
Stefan Krah
_______________________________________________
Python-Dev mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to