Подтвердить что ты не робот

Что дает уступка? myVar = (выход)

Я знаком с доходностью, чтобы вернуть значение, главным образом, в этот вопрос

но что дает результат, когда он находится в правой части задания?

@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

Я наткнулся на это, на образцах кода этот блог, исследуя государственные машины и сопрограммы.

4b9b3361

Ответ 1

Оператор yield, используемый в функции, превращает эту функцию в "генератор" (функцию, которая создает итератор). Получающийся итератор обычно возобновляется, вызывая next(). Однако можно отправить значения функции, вызвав метод send() вместо next(), чтобы возобновить его:

cr.send(1)

В вашем примере это будет каждый раз присваивать значение 1 c.

cr.next() эффективно эквивалентно cr.send(None)

Ответ 2

Вы можете отправлять значения генератору с помощью функции send.

Если вы выполните:

p = protocol()
p.next() # advance to the yield statement, otherwise I can't call send
p.send(5)

то yield вернет 5, поэтому внутри генератора c будет 5.

Кроме того, если вы вызываете p.next(), yield вернет None.

Вы можете найти дополнительную информацию здесь.