yield - Is there a difference between starting a Python 3 generator with next(gen) and gen.send(None)? -


when create python 3 generator , start run right away. error like:

typeerror: can't send non-none value just-started generator 

and in order going (send messages or form it) first must call __next__ on it: next(gen) or pass none gen.send(none).

def echo_back():     while true:                 r = yield         print(r)  # gen <generator object echo_back @ 0x103cc9240> gen = echo_back()  # send not none , error below # expected though gen.send(1)  # typeerror: can't send non-none value just-started generator  # either of lines below "put generator in active state" # don't need use both next(gen) gen.send(none)  gen.send('hello stack overflow')  # prints: hello stack overflow) 

both ways produce same result (fire generator).

what difference, if any, between starting generator next(gen) opposed gen.send(none)?

from generator.send():

when send() called start generator, must called none argument, because there no yield expression receive value.

calling next() on generator starts execution until first yield expression @ non-none values can sent it, become value of yield expression (e.g., x = yield).

both next(gen) , gen.send(none) behave same way (i.e., no difference in usage).