生成器

一、生成器函数:只要函数体包含yield关键字,该函数就是生成器函数

1、生成器就是迭代器

 1 def foo():
 2     print("first")
 3     yield
 4     print("second")
 5     yield
 6     print("third")
 7     yield
 8     print("fourth")
 9     yield
10     print("fifth")
11 
12 i = foo()
13 for n in i:   #触发迭代器i的执行,进而触发函数的执行
14     print(n)
View Code
 1 def conter(n):
 2     print("starting---")
 3     i = 0
 4     while i < n:
 5         yield i
 6         i +=1
 7     print("end.....")
 8 
 9 a = conter(9)
10 for d in a :
11     print(d)
View Code

2、yield的功能

  1.相当于为函数封装好__iter__和__next__

  2.return只能返回一次值,函数就终止了,

  而yield能返回多次值,每次返回都会将函数暂停,下次next会从

  上一次暂停的位置继续执行

 1 #tail -f a.txt | grep 'python'
 2 import time
 3 def tail(filepath):
 4     with open(filepath,'r',encoding='utf-8') as f:
 5         f.seek(0,2)
 6         while True:
 7             line=f.readline().strip()
 8             if line :
 9                 yield line
10             else:
11                 time.sleep(0.2)
12 
13 def grep(patten,lines):
14     for line in lines:
15         if patten in line:
16             yield line
17 g = grep('python',tail('a.txt'))
18 
19 
20 for i in g:
21     print(i)
tail -f 功能grep

 

posted @ 2017-05-23 15:52  Sober--Never  阅读(64)  评论(0)    收藏  举报