# --*-- coding: utf-8 --*--
import random, time
def echo(value=None):
while True:
a = (yield value)
print("The a is", a)
print ('The value is', value)
if value:
value += 1
print ('The value is', value)
g = echo(1)
print g.next()
print g.send(3)
print g.send(8)
print g.send(10)
。以下为代码调试
1
('The a is', 3)
('The value is', 1)
('The value is', 2)
2
('The a is', 8)
('The value is', 2)
('The value is', 3)
3
('The a is', 10)
('The value is', 3)
('The value is', 4)
4
当调用g.next()时,执行yield value 生成1,函数暂停并返回1,注意此时函数
不会执行“将1附给变量a”。接着调用
g.send(3),接下来的函数执行步骤依次为:(1)参数3作为表达式
(yield value)的值,并附给变量a返回,函数yield恢复从执行a=yield表达式开始。(2)上次函数暂停时value=1,将此value代入
value += 1,得到value=2(#解释了输出
('The value is', 1)
('The value is', 2)
)。(3)执行yield value 生成2,函数暂停并返回2,注意此时函数仍不会执行“将2附给变量a”。后面的
g.send(8)和
g.send(10)步骤以此类推。