码迷,mamicode.com
首页 > 编程语言 > 详细

python中的生成器yield

时间:2016-05-04 10:47:52      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:yield实例   python生成器   yield含义与作用   

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

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


输出结果:

Start!

5
4

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

通常不会手动调用__next__()方法  而是使用循环

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


输出结果:
5
4
3
2
1

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

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存储的并不是单一的值,而是保存当前的程序执行状态 不用一次计算所有的元素 而是用一次算一次 节省内存空间

 


本文出自 “洪大春的技术专栏” 博客,请务必保留此出处http://hongdachun.blog.51cto.com/9586598/1769891

python中的生成器yield

标签:yield实例   python生成器   yield含义与作用   

原文地址:http://hongdachun.blog.51cto.com/9586598/1769891

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!