PHP前端开发

python中的生成器yield

百变鹏仔 3小时前 #Python
文章标签 生成器

生成器yield:使用yield语句 
可以让函数生成一个结果序列而不仅仅是一个值

def  countdow(n):       print("Start!");       while n>0:            yield n;            n -= 1;  c = countdow(5);  print(c.__next__())   print(c.__next__())

输出结果:

Start!54

__next__()方法使生成器函数一直运行到下一条yield语句为止,此时__next__()方法将返回值传递给了yield并且函数暂时中止执行 
再次调用__next__()时 函数继续执行 此过程持续到生成器函数返回结束为止
通常不会手动调用__next__()方法 
而是使用循环

for i in  countdow(5):   print(i);

输出结果:

54321

生成器是基于处理管道、流或数据流编写程序的一种强大的方式;
如:

立即学习“Python免费学习笔记(深入)”;

def tail(f):     for line in f:      if not line : #如果 非真 则暂时休眠并且再次尝试     time.sleep(0.1);     continue;    yield line; # 将获取到的文件中的值 生成一个序列的值  filecount = tail(open('E:/work.txt'));    #grep方法 用于在上面方法生成器中查找特定的子字符串    def grep(lines,searchtext):   for line in lines:    if searchtext in line :     yield  line;  lines  = grep(filecount,'tom');  #查找带有tom 的子字符串  for line in lines:    print(line);

输出结果:
'tom',120,132
总结:
生成器的作用:当程序运行到yield时 将运行的值 
传递给了yield 程序不会输出 可认为在此时程序处于暂停的状态 当使用__next__()方法的时候 函数继续执行 
直至再次遇到yield 

优点:yield存储的并不是单一的值,而是保存当前的程序执行状态 不用一次计算所有的元素 而是用一次算一次 节省内存空间