2014-05-08 118 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