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的位置在哪,都会报错