You can only modify a context when it's the current context, so using ContextVar.set() in Context.run().
Victor Le 5 janv. 2018 11:42 AM, "Paul Moore" <p.f.mo...@gmail.com> a écrit : On 4 January 2018 at 23:58, Guido van Rossum <gu...@python.org> wrote: > On Thu, Jan 4, 2018 at 9:27 AM, Paul Moore <p.f.mo...@gmail.com> wrote: >> >> On 4 January 2018 at 15:56, Guido van Rossum <gu...@python.org> wrote: >> > It was get_context() in an earlier version of PEP 567. We changed it to >> > copy_context() believing that that would clarify that you get a clone >> > that >> > is unaffected by subsequent ContextVar.set() operations (which affect >> > the >> > *current* context rather than the copy you just got). >> >> Ah thanks. In which case, simply changing the emphasis to avoid the >> implication that Context objects are immutable (while that may be true >> in a technical/implementation sense, it's not really true in a design >> sense if ContextVar.set modifies the value of a variable in a context) >> is probably sufficient. > > > Do you have a specific proposal for a wording change? PEP 567 describes > Context as "a read-only mapping, implemented using an immutable dictionary." > This sounds all right to me -- "read-only" is weaker than "immutable". Maybe > the implementation should not be mentioned here? (The crux here is that a > given Context acts as a variable referencing an immutable dict -- but it may > reference different immutable dicts at different times.) I've been struggling to think of good alternative wordings (it's a case of "I'm not sure what you're trying to say, so I can't work out how you should say it", unfortunately). The best I can come up with is """ A Context is a mapping from ContextVar objects to their values. The Context itself exposes the Mapping interface, so cannot be modified directly - to modify the value associated with a variable you need to use the ContextVar.set() method. """ Does that explain things correctly? One thing I am sure of is that we should remove "implemented using an immutable dictionary" - it's an implementation detail, and adds nothing but confusion to mention it here. Paul _______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/ victor.stinner%40gmail.com
_______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com