生成器试题¶
实现tail命令功能¶
import time
def tail(filename):
f = open(filename)
f.seek(0, 2) #从文件末尾算起
while True:
line = f.readline() # 读取文件中新的文本行
if not line:
time.sleep(0.1)
continue
yield line
tail_g = tail('tmp')
for line in tail_g:
print(line)
使用echo写内容到文件测试
send¶
def averager():
total = 0.0
count = 0
average = None
while True:
term = yield average
total += term
count += 1
average = total/count
g_avg = averager()
next(g_avg)
print(g_avg.send(10))
print(g_avg.send(30))
print(g_avg.send(5))
结果
10.0
20.0
15.0
结果为何¶
def demo():
for i in range(4):
yield i
g=demo()
g1=(i for i in g)
g2=(i for i in g1)
print(list(g1))
print(list(g2))
打印结果为
[0, 1, 2, 3]
[]
g1=(i for i in g)
# g1 为生成器 ,此时为空,所以g2 为空
g2=(i for i in g1)
结果为何? (二)¶
def add(n, i):
return n+i
def test():
for i in range(4):
yield i
g=test()
for n in [1,10]:
g=(add(n,i) for i in g)
print(list(g))
结果
[20, 21, 22, 23]
原因
n = 10
i = 10
n + i = 20
n = 10
i = 11
n + i = 21
...