[Python-ideas] PEP draft: context variables
yselivanov.ml at gmail.com
Tue Oct 10 12:29:54 EDT 2017
On Tue, Oct 10, 2017 at 12:21 PM, Koos Zevenhoven <k7hoven at gmail.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
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
> 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:
> ctx_switcher = context_switcher()
> def next_context():
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()
> yield get_second_value()
> def the_bulk_of_things():
> return get_bulk()
> def last_but_not_least():
> 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.
More information about the Python-ideas