您的位置:首页 > 编程语言 > Python开发

python中的生成器yield

2016-05-04 01:39 309 查看
生成器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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: