我正在尝试创建一个迭代器,它从文本文件中提取每个单词并迭代它们.这就是我现在所拥有的:
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]
Run Code Online (Sandbox Code Playgroud)
将它与Python迭代器的功能简单示例相比较,当我尝试在一个简单的情况下使用它时,我无法弄清楚为什么它不起作用:
sit = String_iterator(filename)
for word in sit:
print word
Run Code Online (Sandbox Code Playgroud)
我收到错误:
Traceback (most recent call last):
File "WordCounter.py", line 68, in <module>
for word in sit:
TypeError: iteration over non-sequence
Run Code Online (Sandbox Code Playgroud)
我猜它有一些错误String_iterator,它不是一个合适的迭代器,但我无法弄清楚是什么.
(我在阅读文件时遇到了编码问题,但这完全是另一个问题......)
你忘记了一个下划线:
def __iter_(self):
# ---------^
Run Code Online (Sandbox Code Playgroud)
除非使用正确的名称,否则Python不会将您的自定义类识别为迭代器:
def __iter__(self):
return self
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
347 次 |
| 最近记录: |