案例:生成器
案例一:取娃哈哈
1 def wahaha(num): # 生成器函数 2 for i in range(num): 3 yield '娃哈哈 %s' %i 4 5 b = wahaha(50) # 共50瓶娃哈哈 6 7 times = 1 # 取5瓶 8 for i in b: 9 print(i) 10 if times == 5: 11 break 12 times += 1 13 14 print(b.__next__()) # 再取一瓶,(取第6瓶) 15 print(b.__next__()) # 再取一瓶,(取第7瓶) 16 17 times = 1 # 再取5瓶 18 for i in b: 19 print(i) 20 if times == 5: 21 break 22 times += 1
案例二:监听文件输入,用户一边在文件中输入,这边就能看到用户输入的内容
1 def tail(filename): 2 f = open(filename, encoding='utf-8') 3 while True: 4 line = f.readline() 5 if line.strip(): 6 yield line.strip() 7 8 g = tail('test.txt') 9 for i in g: 10 if '傻比' in i: # 监听过滤:只打印有傻比的一行 11 print(i)
案例三:获取移动平均值
1 # 获取移动平均值 2 def average(): 3 sum = 0 4 count = 0 5 avg = 0 6 while True: 7 num = yield avg 8 sum += num 9 count += 1 10 avg = sum/count 11 12 13 avg_g = average() # 定义生成器 14 avg_g.__next__() # 第一个yield不能用send因此用next 15 avg1 = avg_g.send(10) 16 avg1 = avg_g.send(20) 17 avg1 = avg_g.send(10) 18 print(avg1)

浙公网安备 33010602011771号