Поймите итератора и итерацию

Предисловие:

Перед итератором итератора этого раздела существует некоторая путаница, с некоторой информацией, чтобы выразить мое понимание этих понятий не может быть, но для начала моих друзей, чтобы начать с нуля, чтобы понять,


 

Прямо в точку первым представил итерируемые популярное понимание и итераторы

  Итератор просто быть рядом () для получения следующей итерации значения объекта, итератор не напрямую сохранить значение последовательности итераций, и итерации алгоритма хранимого значения, полученное при

  Итерируемый должна быть метод ITER () вызовом, чтобы получить Iterable объектов, только итерируемый доступны для для цикла

 

Принцип, лежащий для цикла:

  Ниже приводится для формата петли

 

  для ввода в итерируемых: 
    петлях

  Суть метода состоит в вызове встроенный ITER (), полученный объект итератора, то значение итерации я получают путем каждого следующего (итератора) вызова

  Например, следующий код:

для я в х:
     печать (я)

  Его можно переписать в виде:

Итератор = ИТЭР (х)
 , а True: 
    я = следующий (итератор)
     печать (я)

 

Строго говоря, или принцип, лежащий в основе

  Итератор или объект итератора: реализует __next __ () метод Magic (класс) экземпляр объекта, метод возвращает следующее значение итератора

  Итерируемый: __ реализует __iter магических методы (класс экземпляр) объект (), который возвращает объект итератора

  

На самом деле, рядом и ИТЭР является еще пакет __next__ и __iter__ или сказать дальше и ИТЭР, когда они призваны выполнять функции в пределах __next__ и __iter__ для достижения итератора и итерацию и функция

 

Таким образом, мы можем понять цикл, итерируемые, итераторы три контакта:

  Для итераций цикла может быть только объекты, итерируемыми они должны реализовать итератор

Таким образом, мы можем реализовать пользовательские итераторы и итератор объект для того, чтобы добиться эффекта цикла для таможни 


 

Пример:

Ряд Фибоначчи для достижения прорезать итератора и итерацию

Они определяются класс итератора и объект принадлежит итерации:

Класс С февраля: 
  «» «может быть определена в классе итерации объекта» «»
DEF на __init__ (Self, NUM): указывает длину номера столбца #num   self.a . = 1   self.b, = 2
     self.current = self.a
     self.num NUM = DEF __iter__ (Self): вернуть FebIterator (Self) класс FebIterator (Self):
  '' 'определенный класс итератора' ''
DEF в __init__ (Self, Source): self.source = Источник DEF __next__ (Self):
     
     IF ( . 1-self.num> = 0):
       . self.num = self.num 1-     self.current
= self.a     self.a= Self.b,     self.b, = + self.current self.b, # выше двух промежуточной переменной присваивания могут быть опущены непосредственно написать self.a, self.b, self.b, = + self.a Само, В
       Самовозврат. curent
     в другом: поднимание StopIteration

Называя эти два класса для создания экземпляров объектов может быть достигнуто циркуляционный печати число Фибоначчи

февраль = февраль () 
для ввода в феврале: печать (я)

На самом деле, для простоты и удобства, можно одновременно достичь __iter __ () и метод __next __ () в классе, класс, экземпляр объектов является лишь одним из объектов итерации итератора, следующим образом:

Класс февраля:
     Защиту  __init__ (): 
        self.a = 1 
        self.b = 2 
     sele.current = self.a Защиту __iter__ (Я): возвращение собственной четкости __next__ ():
     если (self.num-1> = 0):
       = Self.num. 1-self.num 
        self.current = self.a 
        self.a = self.b,      self.b, self.current # + = self.b, выше , два промежуточных присваивание переменной могут быть опущены непосредственно написать self.a , self.b, self.b, =, + self.a Я, B 
       возвращение self.curent
     другое: Поднимите StopIteration
 

До его использования, и нет никакой разницы, но более простой, если есть четкое понимание и осознание итератора и итерацию, или путали эти два понятия

рекомендация

отwww.cnblogs.com/burningcarbon/p/11567872.html