怎么突然就多出来了prevlines和pline 两个变量,什么意思啊?

代码如下
from collections import deque

def search(lines, pattern, history=5):
previous_lines = deque(maxlen=history)
for line in lines:
if pattern in line:
yield line, previous_lines
previous_lines.append(line)

# Example use on a file
if __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:
这两句

萧十郎
浏览 152回答 2
2回答

SMILET

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

PIPIONE

yield line, previous_linesyield关键字你自己去查下
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python