1.认识生成器
直接上代码:
<span style="font-size:32px;">def countingdown(n):
print 'counting down!'
while n > 0:
yield n
n-=1
for i in countingdown(5):
print i</span>
输出:
任何使用yield的函数都称为生成器。调用生成器函数将创建一个对象,该对象通过连续调用next()方法生成结果序列。例如:
next()调用生成器函数一直运行到下一条yield语句为止。此时next()将返回值传递给yield,而且函数暂时中止执行。再次调用next()时,将继续执行yield之后的程序。此过程持续到函数返回为止。
通常不会手动调用next(),而是使用for循环(最上面的代码)
2.尝试使用
# coding:utf-8
# Filename : yield2.py
import time
#tail一个文件 如(tail -f)
def tail(f):
while True :
line = f.readline()
if not line:
break
yield line
#下面的生成器用于在很多行中查找特定的字符串
def grep(lines,searchtext):
for line in lines:
if searchtext in line:
yield line
#下面的例子将以上两个生成器合在一起,创建了一个简单的处理管道
wwwlog = tail(open('test.txt'))
pythonlines = grep(wwwlog,'python')
for line in pythonlines:
print line