The proposed solution seems to be increasing syntactic complexity rather than reducing it by adding another keyword, "from" into the mix which is hardly optimal imo.
This to me indicates a systematic logical flaw of thinking of hitting a "yield" in the call stack as analagous to "return". When in fact it is the inverse and analagous to waiting for a function to return and thus more similar to a print() function call. The whole point of coroutine yielding is that it inverts the point of view of a call stack and allows the called routine to be the calling routine as well.
I still use Python for some things and have too many fond memories to ever hate it, but even if generators get cleaned up I'll probably stay w/ Lua for pipeline type projects as I've grown too used to runtime within an order of magnitude of C, better coroutines, and its more Scheme-like nature.
I looked around a bit for the original semantic intention behind choosing "yield" as a keyword, but came up empty. Anyone?
Function call: halt further processing of current call stack, execute procedures, resume call stack after function call when control returns.
Yield: halt further processing of current call stack, execute procedures, resume call stack after yield when control returns.
Return: destroy current call stack.
The variation present on the code continuation axis is far more significant than the variation on the coughing-up-values axis.