2009/07/10

"__iter__"

今更「iterator って何よ」って思った
ググった
2.3.5 イテレータ型」リファレンスきた
  • iterator はインスタンスで次の 2 つのメソッドを持つもの:
    • __iter__(): iterator を返す
    • __next__(): 次の要素、若しくはもぉ無いときには exceptions.StopIteration を返す
だって
あー、__iter__ は一度 exceptions.StopIteration を返したら
その後何度呼ばれても exceptions.StopIteration を返すべきらしい

何か作ろうと思った
フィボナッチと思った
class fibo(object):
def __init__(self):
self.a = 0
self.b = 1

def __iter__(self):
return self

def next(self):
(self.a, self.b) = (self.b, self.a+self.b)
return self.a
止まらない

止まる例が何か無いかと思った
約数を次々と出してみよう
class dividing(object):
def __init__(self, num):
assert isinstance(num, int) or isinstance(num, long), str(num) + " is not an integer"
assert num > 0, str(num) + " is not positive integer"
self.num = num
self.div = 0

def __iter__(self):
return self

def next(self):
while self.div <= self.num:
self.div += 1
if self.num % self.div == 0:
return self.div
raise StopIteration
でもこれ、アホすぎて時間かかりすぎ。
まぁ、いいか、何となく分かった

0 件のコメント:

コメントを投稿