pythopnジェネレータ


       ,            。  ,      ,          。
  ,      100       ,           ,                ,
                    。
  ,                  ,                         ?
          list,         。 Python ,             ,  
~~     (Generator)。~~
     generator,      。
        ,           []  (),      generator:
>>> a=(x*x for x in range(1,10))
>>> print(a)          # at 0x00000284C52B19E8>
>>> print(next(a))  
  L g          [] (),L   list, g   generator。
         list      ,        generator       ?
           ,    generator next()  :
>>> a=(x*x for x in range(1,10))
>>> print(a)          # at 0x00000284C52B19E8>
>>> print(next(a))       #4
>>>print(next(a))       #9
>>>print(next(a))       #16
>>>print(next(a))       #25

generator      ,    next(),           ,           ,
        ,  StopIteration   。
  ,        next()         ,        for  ,  generator       :
>>> a=(x*x for x in range(1,10))
>>> for i in a:
>>>     print(i)            #1 4 9 16 25 36 49 64 81

  ,     generator ,         next()  ,    for      。
generator    。           ,         for         ,
         。
  ,         (Fibonacci),          ,                :
1, 1, 2, 3, 5, 8, 13, 21, 34, ...
                ,  ,             :
>>> def fib(max):
>>>     n, a, b = 0, 0, 1
>>>     while n < max:
>>>         print(b)
>>>         a, b = b, a + b
>>>         n = n + 1
>>> fib(9)                         #1, 1, 2, 3, 5, 8, 13, 21, 34

    ,    ,fib                    ,          ,
          ,          generator。
    ,      generator     。  fib    generator,
    print b  yield b    :
>>> def fib(max):
>>>     n, a, b = 0, 0, 1
>>>     while n < max:
>>>         yield(b)
>>>         a, b = b, a + b
>>>         n = n + 1
>>> for i in fib(9):
>>>     print(i)                      #1, 1, 2, 3, 5, 8, 13, 21, 34

  ,       generator           。       ,
  return               。   generator   ,     next()     ,
  yield    ,           yield       。
       ,    generator,      1,3,5:
>>> def odd():
>>>     print('step 1')
>>>     yield 1
>>>     print ('step 2')
>>>     yield 3
>>>     print ('step 3')
>>>     yield 5

>>> o = odd()
>>> print(next(o))              #step 1  ,  1
>>> print(next(o))              #step 2  ,  3
>>> print(next(o))              #step 3  ,  5
>>> print(next(o))  #StopIteration

    ,odd      ,  generator,      ,  yield   ,       。
  3 yield ,    yield     ,  , 4   next()   。
  fib   ,            yield,      。
                 ,              。
   ,     generator ,          next()    ,      for     :
>>> def odd():
>>>     print('step 1')
>>>     yield 1
>>>     print ('step 2')
>>>     yield 3
>>>     print ('step 3')
>>>     yield 5
>>> for i in odd():
>>>     print(i)  #step 1,1   step 2,3  step 3,5

generator        , Python ,             generator,
              generator。
   generator     ,   for                ,         for  。
       generator  ,  return                ,    generator   ,
for      。