ググった
「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 件のコメント:
コメントを投稿