zoukankan      html  css  js  c++  java
  • Python Generators vs Iterators

    http://stackoverflow.com/questions/2776829/difference-between-python-generators-vs-iterators

    iterator is a more general concept: any object whose class has a next method (__next__ in Python 3) and an __iter__ method that does return self.

    Every generator is an iterator, but not vice versa. A generator is built by calling a function that has one or more yield expressions (yield statements, in Python 2.5 and earlier), and is an object that meets the previous paragraph's definition of an iterator.

    You may want to use a custom iterator, rather than a generator, when you need a class with somewhat complex state-maintaining behavior, or want to expose other methods besides next (and __iter__and __init__). Most often, a generator (sometimes, for sufficiently simple needs, a generatorexpression) is sufficient, and it's simpler to code because state maintenance (within reasonable limits) is basically "done for you" by the frame getting suspended and resumed.

    For example, a generator such as:

    def squares(start, stop):for i in xrange(start, stop):yield i * i

    or the equivalent generator expression (genexp)

    (i*i for i in xrange(start, stop))

    would take more code to build as a custom iterator:

    classSquares(object):def __init__(self, start, stop):
           self.start = start
           self.stop = stop
        def __iter__(self):return self
        def next(self):if self.start >= self.stop:raiseStopIteration
           current = self.start * self.start
           self.start +=1return current

    But, of course, with class Squares you could easily offer extra methods, i.e.

    def current(self):return self.start
  • 相关阅读:
    OCP-1Z0-053-V12.02-541题
    OCP-1Z0-053-V12.02-544题
    OCP-1Z0-053-V12.02-545题
    OCP-1Z0-053-V13.02-711题
    OCP-1Z0-053-V12.02-493题
    OCP-1Z0-053-V13.02-696题
    OCP-1Z0-053-V12.02-522题
    OCP-1Z0-053-V12.02-523题
    OCP-1Z0-053-V12.02-534题
    OCP-1Z0-053-V13.02-692题
  • 原文地址:https://www.cnblogs.com/waniu/p/3269220.html
Copyright © 2011-2022 走看看