Я изучаю 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
, но 3send
s. Зачем ему отправлятьNone
в первый раз? - Он выталкивает
StopIteration
в последнийsend
. Есть ли способ избежать этого исключения?
Может ли кто-нибудь объяснить это? Спасибо заранее.