9519


Python2.7でイテレータクラスを作りました。  
インデックスを返すようにしたかったため、タプルで返すようにしたのですが、インデックスが不要な場合、エラーとなってしまいます。

これをエラーなく、インデックスが不要な場合にも対応する方法を共有します。

[code]

    class ItTest(object):
    
        def __init__(self):
            self.list = [10, 20, 30]
    
        def __iter__(self):
            self.index = 0
            self.max = len(self.list)
            return self
    
        def next(self):
            if self.index >= self.max:
                raise StopIteration
            output_index = self.index
            output = self.list[self.index]
            self.index += 1
            return output_index, output
    
    
    def main():
        # OK
        for index, x in ItTest():
            print(x+1)
        # エラー
        for x in ItTest():
            print(x+1)
    
[/code]


CC BY-SA 3.0
2015-04-24T01:06:34.067
9518
2015-05-08T00:15:49.877
2015-05-08T00:15:49.877
7214
7214
question
python
Python：イテレータクラスでインデックスを返したい


単純に`enumerate`を使えばよかったです。  
リスト等にしか使用できないと思い込みました･･･

[code]

    class ItTest(object):
    
        def __init__(self):
            self.list = [10, 20, 30]
    
        def __iter__(self):
            self.index = 0
            self.max = len(self.list)
            return self
    
        def next(self):
            if self.index >= self.max:
                raise StopIteration
            output = self.list[self.index]
            self.index += 1
            return output # indexは返さない
    
    
    def main():
        # OK
        for index, x in enumerate(ItTest()):
            print(x+1)
        # OK
        for x in ItTest():
            print(x+1)
    
[/code]


CC BY-SA 3.0
2015-04-24T01:06:34.067
9519
2015-04-24T14:50:30.707
2015-04-24T14:50:30.707
7214
7214
9518
answer