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)