On 8 October 2017 at 08:40, Koos Zevenhoven <k7hoven@gmail.com> wrote:On Oct 7, 2017 12:20, "Koos Zevenhoven" <k7hoven@gmail.com> wrote:Unfortunately, we actually need a third kind of generator semantics, something like this:@contextvars.caller_contextdef genfunc():assert cvar.value is the_valueyieldassert cvar.value is the_valuewith cvar.assign(the_value):gen = genfunc()next(gen)with cvar.assign(1234567890):try:next(gen)except StopIteration:passNick, Yury and I (and Nathaniel, Guido, Jim, ...?) somehow just narrowly missed the reasons for this in discussions related to PEP 550. Perhaps because we had mostly been looking at it from an async angle.That's certainly a semantics that one can write down (and it's what the very first version of PEP 550 did),I do remember Yury mentioning that the first draft of PEP 550 captured something when the generator function was called. I think I started reading the discussions after that had already been removed, so I don't know exactly what it was. But I doubt that it was *exactly* the above, because PEP 550 uses set and get operations instead of "assignment contexts" like PEP 555 (this one) does. We didn't forget it, we just don't think it's very useful.