what does yield as assignment do? myVar = (yield)

python, yield

Solution

The `yield` statement used in a function turns that function into a "generator" (a function that creates an iterator). The resulting iterator is normally resumed by calling `next()`. However it is possible to send values to the function by calling the method `send()` instead of `next()` to resume it:

cr.send(1)

In your example this would assign the value `1` to `c` each time.

`cr.next()` is effectively equivalent to `cr.send(None)`

Problem

I'm familiar with yield to return a value thanks mostly to this question but what does yield do when it is on the right side of an assignment? ``` @coroutine def protocol(target=None): while True: c = (yield) def coroutine(func): def start(*args,**kwargs): cr = func(*args,**kwargs) cr.next() return cr return start ``` I came across this, on the code samples of this blog, while researching state machines and coroutines.

Original source

Related problems