创建方式:
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行只会执行=右边,然后再次暂停)。
原文:https://www.cnblogs.com/panlj/p/14748871.html