, 。 , , 。
, 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 。