学习迭代器(深入Python3)

时间:2019-02-05 10:56:47

标签: python iterator

一个问题基于this snippet,作者对此的评论如下:

  

只要从特征码文件中读取的规则与我们尝试复数的词不匹配,此读取,构建和缓存过程就会继续。如果确实在文件末尾找到匹配的规则,则只需使用它并停止,文件仍处于打开状态即可。文件指针将停留在我们停止读取的任何位置,等待下一个readline()命令。同时,缓存中现在有更多项目,如果我们从头开始尝试对一个新单词进行复数操作,请先尝试缓存中的每个项目,然后再从中读取下一行图案文件。

  1. 在上面引用的文字中,我看不到任何以粗体显示的实现。每个缓存项目的尝试程度如何?
  2. 每次对象调用都清除self.cache是​​否正确?

1 个答案:

答案 0 :(得分:0)

  1. 它在plural函数中:
for matches_rule, apply_rule in rules:
    if matches_rule(noun):
  1. 每个LazyRules类的新实例(例如rules = LazyRules())都以其自己的空缓存(self.cache = []下的__init__)开始。第一次之后,每次在该对象(for ... in rules)上进行迭代时,它都可以使用该缓存。