Я изучал сопрограмму и попробовал учебник, я нашел этот код.
>>> def g(n):
... while n >= 0:
... r = (yield n)
... if r:
... n = r
... else:
... n -= 1
Я спросил себя, почему было r = (yield n)
, затем я изменил код, как показано ниже,
>>> def f(n):
... while n >= 0:
... r = yield n
... if r:
... n = r
... else:
... n -= 1
...
>>>
После этого я догадался, что при вызове send(value)
, r = yield n
вернет значение, а r = (yield n)
вернет кортеж, например (value,).
Итак, я тестировал код отдельно, результат:
>>>
>>> gc = g(5)
>>> gc.send(None)
5
>>> type(gc.send(4))
<class 'int'>
>>>
>>> fc = f(5)
>>> fc.send(None)
5
>>> fc.send(4)
4
>>> type(fc.send(4))
<class 'int'>
Оба результата имели тип int, а не тип кортежа.
Я действительно запутался, в чем разница между двумя кодами?
Казалось, нет никакой разницы.