小白求助,在看《python3-cookbook》遇到的问题

2019-08-08 13:49:29 +08:00
 scp404

《 python3-cookbook 》第一章第三节:保留最后 N 个元素

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, precious_lines
        previous_lines.append(line)

# Example use on a file
if __name__ == '__main__':
    with open(r'../../somefile.txt') as f:
        for line, preclines in search(f, 'python', 5):
            for pline in prevlines:
                print(pline, end='')
                print(line, end='')
                print('-' * 20)

代码运行没报错,但是为什么没有 print 出东西? 我调试了一下,好像是search函数里yield后面的变量没有返回给linepreclines迭代,搞不懂为什么,是我理解错了吗?

1375 次点击
所在节点    Python
3 条回复
chenstack
2019-08-08 14:50:23 +08:00
贴出的代码有两处拼写错误
precious_lines -> previous_lines
preclines ->prevlines

改完后运行是 ok 的

somefile.txt:
java
python3
rust
php
js
c++
c
go
python3.7
ruby

output:
java
python3
--------------------
php
python3.7
--------------------
js
python3.7
--------------------
c++
python3.7
--------------------
c
python3.7
--------------------
go
python3.7
--------------------
scp404
2019-08-08 15:43:25 +08:00
我的错...代码贴错了

直接 copy 书里的源码是这样的

```
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)
```

没打印出东西

我是不是回复不了图片。。。
scp404
2019-08-08 16:36:08 +08:00
@chenstack 我的错...代码贴错了,之前运行的时候变量名是对的。不过我把 txt 的内容换成老哥你的,能出结果。谢谢老哥了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/590129

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX