2014-12-10 3 views
1

В приведенном ниже коде, я запутался, почему Hi3 никогда не печатается:Понимание, определенные пользователем итераторы

class Counter(object): 
    def __init__(self, size): 
     self.size = size 
     self.start = 0 

    def __iter__(self): 
     print "called __iter__", self.size 
     return self 

    def next(self): 
     if self.start < self.size: 
      print 'Hi1' 
      self.start = self.start + 1 
      print 'Hi2' 
      return self.start 
      print 'Hi3' 
     raise StopIteration 

c = Counter(2) 
for num in c: 
    print num 

ответ

1

Для достижения print 'Hi3' вам нужно пройти мимо return self.start заявление. Помните, что оператор return немедленно выдает эту функцию. (Возможно, вы смешивали итераторы и генераторы и думали о yield вместо return).

Смежные вопросы