2014-05-08 120 views
1

我试图创建一个迭代器,从文本文件中提取每个单词并遍历它们。这就是我现在所拥有的:Python自定义迭代器:通过非序列迭代

class String_iterator: 
    def __init__(self, filename): 
     self.words = [] 
     f = open(filename, 'r') 
     lines = f.readlines() 
     for line in lines: 
      self.words.extend(line.split(" ")) 
     self.ind = 0 
     self.size = len(self.words) 

    def __iter_(self): 
     return self 

    def next(self): 
     if self.ind > self.size: 
      raise StopIteration 
     else: 
      self.ind += 1 
      return self.words[self.ind-1] 

比较它与Python的迭代器功能简单的例子,我想不通为什么它不工作时,我尝试甚至一个简单的情况下使用它:

sit = String_iterator(filename) 
for word in sit: 
    print word 

我得到的错误:

Traceback (most recent call last): 
    File "WordCounter.py", line 68, in <module> 
    for word in sit: 
TypeError: iteration over non-sequence 

我猜测,有什么不对的String_iterator,它不是一个适当的迭代器,但我想不出什么。

(我还分别具有与编码问题在文件中读取,但这是另一个问题完全...)

回答

5

你忘了下划线:

def __iter_(self): 
# ---------^ 

Python将无法识别您的自定义类作为迭代器,除非您使用正确的名称:

def __iter__(self): 
    return self 
+0

哇。我现在觉得很蠢。但是,谢谢。 – Pterosaur