Python自定义迭代器:非序列上的迭代
我正在尝试创建一个迭代器,它从文本文件中提取每个单词并对其进行迭代。这就是我现在拥有的:Python自定义迭代器:非序列上的迭代,python,iterator,Python,Iterator,我正在尝试创建一个迭代器,它从文本文件中提取每个单词并对其进行迭代。这就是我现在拥有的: class String_iterator: def __init__(self, filename): self.words = [] f = open(filename, 'r') lines = f.readlines() for line in lines: self.words.extend(line.
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
回溯(最近一次呼叫最后一次):
文件“WordCounter.py”,第68行,在
对于sit中的单词:
TypeError:非序列上的迭代
我猜String\u迭代器有问题,它不是一个合适的迭代器,但我不知道是什么
(我在读取文件时也遇到编码问题,但这完全是另一个问题…您忘记了下划线:
def __iter_(self):
# ---------^
Python不会将您的自定义类识别为迭代器,除非您使用正确的名称:
def __iter__(self):
return self
您忘记了下划线:
def __iter_(self):
# ---------^
Python不会将您的自定义类识别为迭代器,除非您使用正确的名称:
def __iter__(self):
return self
哇!我现在觉得自己很愚蠢。但是谢谢,哇。我现在觉得自己很愚蠢。但是谢谢。