day07-生成器

 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)

 

posted @ 2019-01-14 17:07  梁劲雄  阅读(138)  评论(0编辑  收藏  举报