代码如下from collections import dequedef search(lines, pattern, history=5):previous_lines = deque(maxlen=history)for line in lines:if pattern in line:yield line, previous_linesprevious_lines.append(line)# Example use on a fileif __name__ == '__main__':with open(r'../../cookbook/somefile.txt') as f:for line, prevlines in search(f, 'python', 5):for pline in prevlines:print(pline, end='')print(line, end='')print('-' * 20)解释下 for line, prevlines in search(f, 'python', 5):for pline in prevlines:这两句
2 回答

SMILET
TA贡献1796条经验 获得超4个赞
for line, prevlines in search(f, 'python', 5):
这行是调用上文中定义的search方法,这个方法中的最后是通过yield返回了两个参数line,和previous_lines,yield是一个迭代器,具体用法这就不详细说了,因为yield是返回两个参数,这句离要用line和prelines来接收两个返回值,search方法中的三个参数根据上边的方法中的定义分别为f是打开的文件的代指参照with open(r'../../cookbook/somefile.txt') as f,'python'是需要查找的条件,参照search方法中的if pattern in line:,5是指search方法中设定的deque双向队列的最大长度。
for pline in prevlines
这句是因为在search方法的结尾处previous_lines.append(line),把查找的包含'python'这句的line添加进了previous_lines这个双向队列,要对这个双向队列遍历输出,所以采用这种写法,其中的pline为代称,可以为任意值,改成a,b,c也没有影响,不过相对应的输出结果的print里的pline也要改成相对应的a,b,c
添加回答
举报
0/150
提交
取消