python生成器和迭代器的总结

2018-03-02  本文已影响0人  不懒狮Blaise

生成器都是一个迭代器,但是反过来不行。

from collections import Iterable
# 如果是可以用for或者next循环处理的就叫做迭代对象。
print(isinstance([], Iterable))
# True
print(isinstance({}, Iterable))
# True

# 可以用next()函数调用并不断返回下一个值的对象称为迭代器: Iterator。
from collections import Iterator #(注意不是Interable)
print(isinstance([], Iterator))
# False
print(isinstance((x for x in range(10)), Iterator))
# True


print(type(x for x in range(10)))
# <generator object <genexpr> at 0x0000000005F04A20>

# 下一节将会说isinstance和type的区别


# 迭代器生成的对象为生成器(因为生成器的原理是可以一边循环一边计算)
def fib(max):
    # a, b = b, a+b
    a, b, n = 0, 1, 0
    while n < max:
        a,b = b,a+b
        yield(a)
        n=n+1
    return 'done'

f = fib(5)

print(isinstance(f, Iterator))

try:    
    while True:
        print(next(f))
except StopIteration as e:
    print('Generator return value:', e.value)
上一篇下一篇

猜你喜欢

热点阅读