1 一. 2 含有yield关键字的函数就是生成器函数。 3 yield不能和return公用,且要写在函数内部。yield也是返回的意思。yield把值返回给函数,函数调用得到一个生成器,里面保存了返回的值。 4 调用生成器函数之后,函数不执行,返回一个生成器。 5 生成器的本质是迭代器。生成器generator 6 从生成器中取值的三个方法:1)__next__ 2)for 3)数据类型的强制转换 : 占用内存 7 8 9 def wahaha(): 10 for i in range(1000000): 11 yield '记录当前状态%s'%i 12 g = wahaha() 13 count = 0 14 for n in g: 15 if count >= 50: #取50个值 16 break 17 print(n) 18 count += 1 19 print(g.__next__()) 20 print(g.__next__()) 21 print(g.__next__()) 22 23 24 def generator(): 25 print(123) 26 content = yield 1 27 print(content) 28 print(456) 29 yield 2 30 g = generator() #调用生成器函数不会执行函数的代码,只会得到一个生成器。所以变量g是生成器。 31 print(g.__next__()) #g.__next__()获取第一个值,代码执行到yield 1结束,此时停在yield 1这个位置,当后面使用g.send(值),就可以给yield 1传递一个值。 32 print(g.send('继续加油')) #send获取下一个值的效果跟__next__一样,只是它获取下一个值的时候给上一个值的位置传递一个值。 33 34 35 二. 36 生成器表达式和列表推导式 37 l = ['列表推导式%s'%i for i in range(10)] 38 print(l) 39 40 g = ('生成器表达式%s'%i for i in range(10)) #g 是生成器 41 print(g) 42 for i in g: 43 print(i)