On Tue, Oct 10, 2017 at 12:21 PM, Koos Zevenhoven email@example.com wrote: [..]
Please stop using "many things .. would", "most likely" etc.
I can't explain everything, especially not in a single email. I will use whatever English words I need. You can also think for yourself––or ask a question.
I can't assign meaning to your examples formulated in "many things" and "most likely". I can reason about concrete words and code examples. You essentially asking us to trust you that you know of some examples and they exist. It's not going to happen.
We have a very focused discussion here. If you know of any particular issue, please demonstrate it with a realistic example. Otherwise, we only increase the number of emails and make things harder to track for everybody.
I'm not going to (and won't be able to) list all those many use cases.
Then why are you working on a PEP? :)
The only such case is contextlib.contextmanager, and PEP 550 provides mechanisms to make generators "leaky" explicitly.
That's not the only one.
Here's another example:
def context_switcher(): for c in contexts: decimal.setcontext(c) yield ctx_switcher = context_switcher()
def next_context(): next(ctx_switcher)
In 10 years of me professionally writing Python code, I've never seen this pattern in any code base. But even if such pattern exists, you can simply decorate "context_switcher" generator to set it's __logical_context__ to None. And it will start to leak things.
BTW, how does PEP 555 handle your own example? I thought it's not possible to implement "decimal.setcontext" with PEP 555 at all!
> > >
And one more example:
def make_things(): old_ctx = None def first_things_first(): first = compute_first_value() yield first
ctx = figure_out_context(first) nonlocal old_ctx old_ctx = decimal.getcontext() decimal.setcontext(ctx) yield get_second_value() def the_bulk_of_things(): return get_bulk() def last_but_not_least(): decimal.set_context(old_ctx) yield "LAST" yield from first_things_first() yield from the_bulk_of_things() yield from last_but_not_least()
all_things = list(make_things())
I can only say that this one wouldn't pass my code review :) This isn't a real example, this is something that you clearly just a piece of tangled convoluted code that you just invented.