使用send() 方法给生成器yield语句传入值,首次next(生成器)等价于生成器.send(None)
举例1: 创建一个类似于range函数的生成器,可以通过send函数动态修改步长。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
def generater(start,end,step):
while (start < = end):
r = yield start
if isinstance (r, int ):
step = r
start + = step
else :
raise StopIteration
a = generater( 0 , 100 , 1 )
for i in range ( 3 ):
print ( next (a))
print (a.send( 4 ))
print ( next (a))
print ( next (a))
|
举例2:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
>>> def Fib():
a,b = 0 , 1
while True :
r = yield b
print ( 'r的值为:%s' % (r))
if r = = 'quit' :
break
a,b = b,a + b
>>> f = Fib()
>>> next (f)
1
>>> next (f)
r的值为: None
1
>>> next (f)
r的值为: None
2
>>> f.send( '我给yield传入了值' )
r的值为:我给 yield 传入了值
3
>>>
|