1 from collections import deque 2 3 4 def search(lines, pattern, history=5): 5 previous_lines = deque(maxlen=history) # 只取history值列 6 # 提供了两端都可以操作的序列, 这意味着, 你可以在序列前后都执行添加或删除, 7 # 当限制长度的deque增加超过限制数的项时, 另一边的项会自动删除 8 for li in lines: 9 if pattern in li: 10 yield li # yield 进行迭代 11 # 带yield的函数是一个生成器,而不是一个函数了,这个生成器有一个函数就是next函数,next就相当于“下一步”生成哪个数, 12 # 这一次的next开始的地方是接着上一次的next停止的地方执行的,所以调用next的时候,生成器并不会从foo函数的开始执行,只是接着上一步停止的地方开始,然后遇到yield后,return出要生成的数,此步就结束。 13 previous_lines.append(li) 14 15 16 if __name__ == '__main__': 17 count = 0 18 with open('C:\Users\Administrator\Desktop\文件\doc\test.txt') as f: 19 for line in search(f, 'runningdoctor', 5): 20 print(line, end='') 21 count += 1 22 print('-' * 20) 23 print(count)