2016-08-05 12 views
1

以下のプログラムを実行して、その印刷の値Noneを試してみました。誰でも私の助けを借りてその印刷Noneこのコードはなぜ印刷されますか?

class Myself(object): 
    def __init__(self): 
     self.record={} 
    def __iter__(self): 
     self._roles = list(self.record.keys()) 
     #print ("in iter self._roles",type(self._roles)) 
     return self 
    def __next__(self): 
     if self._roles: 
      return self._roles.pop() 
     else: 
      StopIteration 

    def __setitem__(self,key,value): 
     self.record[key]=value 
    def __getitem__(self,key): 
     return self.record.get(key,"No record found") 

    def list_all(self): 
     for detail in self.record: 
      print (self.record[detail]) 

def main(): 
    mydetails = Myself() 

    mydetails['name']='Python' 
    mydetails['age']='26' 
    mydetails['job']='software' 
    mydetails.list_all() 

    for x in mydetails: 
     print (x,":",mydetails[x]) 

main() 

答えて

1

あなたはStopIteration上げる必要があります。

def __next__(self): 
    if self._roles: 
     return self._roles.pop() 
    else: 
     raise StopIteration 
1

をあなたは昇給StopIteration execptionする必要があります。

def __next__(self): 
    if self._roles: 
     return self._roles.pop() 
    else: 
     raise StopIteration 

あなたがそれをraiseないので、あなたは、単に名前を参照していますこれは何もしません。次に、__next__メソッドが終了し、デフォルトの暗黙的な結果がreturn Noneになります。

関連する問題