代碼如下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
提交
取消