案例:生成器

案例一:取娃哈哈

 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

 

案例二:监听文件输入,用户一边在文件中输入,这边就能看到用户输入的内容

 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)
移动平均值

 

posted @ 2018-07-17 12:12  宝露  阅读(208)  评论(0)    收藏  举报