Я изучаю Python yield и обнаруживаю, что yield - это не только способ, которым генераторы выводят возвращаемое значение, но и способ поместить значения в генератор. Например, следующий код
def f():
    print (yield),
    print 0,
    print (yield),
    print 1
g = f()
g.send(None)
g.send('x')
g.send('y')
В глобальном масштабе это значение send 'x', 'y' для генератора и, следовательно, в f выводит x 0 y 1. Но я не могу понять
-  Есть 2 
yield, но 3sends. Зачем ему отправлятьNoneв первый раз? -  Он выталкивает 
StopIterationв последнийsend. Есть ли способ избежать этого исключения? 
Может ли кто-нибудь объяснить это? Спасибо заранее.