生成器

创建方式:

1 >>> gen = (i for i in range(10))
2 >>> type(gen)
3 <class 'generator'>
1 def gen():
2     for i in range(10):
3         yield i
4         
5 print(type(gen()))
6 
7 #结果:
8 #<class 'generator'>

方法: send()

 1 def gen():
 2     i = 0
 3     try:
 4         while i < 3:
 5             r = yield i
 6             print(f'r--->{r}')
 7             i += 1
 8     except:
 9         print('end')
10 
11 
12 g = gen()                
13 print(g.send(None))
14 print(g.send('first'))
15 print(g.send('second'))
16 
17 ”“”
18 结果:
19 0
20 r--->first
21 1
22 r--->second
23 2
24 end
25 “”“

第13行传None的原因:

程序运行到13行时,跳转到第一行开始执行,一直到第5行,此时程序是先运行=右边的yield i,把i抛出后,程序就暂停了,还没进行赋值操作,所以在第13行的send中只能传None。

接着程序运行14行,程序就直接从第5行开始执行,此时就会把第14行中send传的first,赋值给r,然后的执行顺序6-7-5(第5行只会执行=右边,然后再次暂停)。

posted on 2021-05-09 21:09  苦海舟  阅读(42)  评论(0)    收藏  举报

导航