为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

萧十郎 2022-12-06 19:15:29
代码如下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

查看完整回答
反对 回复 2022-12-10
?
PIPIONE

TA贡献1829条经验 获得超9个赞

yield line, previous_lines
yield关键字你自己去查下

查看完整回答
反对 回复 2022-12-10
  • 2 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号