我想要一个迭代器,它实际上返回了list属性的每个元素。下面的代码有效,但需要一个丑陋的实例变量导致问题:
一旦我创建了另一个迭代器实例(而不是重复使用testIter),嵌套循环就可以正常工作,但这似乎不是我全生命问题的选择。
如何摆脱实例变量而不牺牲语法中的整洁?
class MyIterator(object):
def __init__(self, myList):
self._list = myList
def __iter__(self):
self.cursor = 0
return self
def next(self):
try:
nextElem = self._list[self.cursor]
except IndexError:
raise StopIteration
else:
self.cursor += 1
return nextElem
def test(l):
testIter = MyIterator(l)
for line in testIter:
for column in testIter:
print "{}/{}".format(line, column),
print
if __name__ == "__main__":
test("abc")
答案 0 :(得分:0)
为什么不使用装饰器@staticmethod
@staticmethod
def test(l):
testIter = MyIterator(l)
for line in testIter:
for column in testIter:
print "{}/{}".format(line, column),
print
使用此功能可以直接使用类名调用该函数。
MyIterator.test("abc")
答案 1 :(得分:0)
这就是我如何发现它的工作原理。我不记得,在我找到提案的地方,__iter__
应该只返回自我,而不是其他方面,但它更加整洁。
class MyIterator(object):
def __init__(self, myList):
self._list = myList
def __iter__(self):
for nextElem in self._list:
yield nextElem
def test(l):
testIter = MyIterator(l)
for line in testIter:
for column in testIter:
print("{}/{}".format(line, column))
print()
if __name__ == "__main__":
test("abc")