イテレータが出力で余分な 'None'を返すのはなぜですか?以下のパラメータ/例では、私は[4]
の代わりに[None,4,None]
を取得しています。なぜ誰が追加のなしを取得しているのか、どうすれば修正できるのか説明できますか?印刷中の「返品」は一度しか表示されないので、返品元の呼び出し機能に1つの明細を追加する必要があると仮定しています。不要な 'None'を返すPythonイテレータ
コード:
class Prizes(object):
def __init__(self,purchase,n,d):
self.purchase = purchase
self.length = len(purchase)
self.i = n-1
self.n = n
self.d = d
def __iter__(self):
return self
def __next__(self):
if self.i < self.length:
old = self.i
self.i += self.n
if (self.purchase[old])%(self.d) == 0:
print("returning")
return old+1
else:
raise StopIteration
def superPrize(purchases, n, d):
return list(Prizes(purchases, n, d))
purchases = [12, 43, 13, 465, 1, 13]
n = 2
d = 3
print(superPrize(purchases, n, d))
出力:明示的なreturn
文を持っていない場合
returning
[None, 4, None]
'self.purchase [old]%self.d!= 0'の場合、' __next__'は何を返しますか? – vaultah
@userを使用すると、問題の原因を特定するまでコードを単純化することもできます。あなたのモジュロアルゴリズムはあなたの質問についてではありません。 – alexis
'self.i = self.n-1'を' def __iter __(self) 'に設定すると、イテレータは再度イテレーションを行うたびに再設定されます。 – Aaron