python中的生成器yield
程序员文章站
2022-05-11 16:52:48
...
生成器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存储的并不是单一的值,而是保存当前的程序执行状态 不用一次计算所有的元素 而是用一次算一次 节省内存空间
以上就是python中的生成器yield的内容,更多相关内容请关注PHP中文网(www.php.cn)!
上一篇: lamp/lnmp优化1--缓存
下一篇: php 输出双引号"与单引号''的方法