1 # _*_coding:utf-8_*_
 2 #1.有yield的函数,函数名加()就变成了生成器,
 3 #2.函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,
 4 #    再次执行时从上次返回的yield语句处继续执行。
 5 #3.yield 可以理解成暂停、睡眠
 6 #4.应用:当函数的内容是处理一个大文件,返回文件中的一部分内容时,就可以在获取一部分内容后用yield暂停读取文件而使程序变得高效。
 7 
 8 
 9 # def demo():
10 #     for b in range(8):
11 #         # yield
12 #         yield b #yield 作用:1.在此处做了“睡眠”,下次调用时会被唤醒。2.把b的值返回给了 i(调用者) 可以用next方法证明
13 #
14 # g = demo()
15 # for i in g :
16 #     print(i)
17 #
18 
19 #########证明:##########
20 '''
21 def demo():
22     for i in range(8):
23         yield i
24 
25 g = demo()
26 re = next(g) #或者 re = g.__next__()
27 re1 = next(g)
28 re2 = next(g)
29 print(re)     
30 print(re1)
31 print(re2)
32 
33 '''
34 ###################另外1##################
35 # def demo():
36 #     for i in range(8):
37 #         print("i: ",i)
38 #         yield
39 
40 
41 # g = demo()
42 # for i in g:
43 #     continue #循环调用生成器
44 
45 # yield与return:
46 def demo(n):
47     # return "异常值"
48     count = 0
49     while count < n:
50         print("count: ",count)
51         count += 1
52         yield count
53     print("******")
54     return "异常值" #详见异常与处理中
55 
56 g = demo(3)
57 n1 = next(g)
58 n2 = next(g)
59 n3 = next(g)
60 n4 = next(g)
61 print(n1)
62 print(n2)
63 print(n3)
64 print(n4)
65 #yield与return同时存在时,无论return的位置在哪,都会报错

 

posted on 2019-07-05 17:35  嗯哈哈  阅读(101)  评论(0编辑  收藏  举报