1. 程式人生 > >可叠代對象、叠代器、生成器之間的關系

可叠代對象、叠代器、生成器之間的關系

import sse 函數 pri self elf port gpo 可叠代對象

from collections import Iterable,Iterator
from abc import ABCMeta, abstractmethod
assert 1 in [1,2,3]
# assert 4 in [1,2,3]
# assert len([1,2]) >=5,‘列表元素個數小於5‘

d = {1: foo, 2: bar, 3: qux}
assert 1 in d
# assert ‘foo‘ in d

print(isinstance(iter([]),Iterable))#True
print(isinstance(iter([]),Iterator))#
True print(isinstance([],Iterable))#True for i in iter([1,2,3]): print(111,i,type(i),type(iter([1,2,3]))) ‘‘‘ 111 1 <class ‘int‘> <class ‘list_iterator‘> 111 2 <class ‘int‘> <class ‘list_iterator‘> 111 3 <class ‘int‘> <class ‘list_iterator‘>
‘‘‘ class Fib: def __init__(self): self.prev = 0 self.curr = 1 def __iter__(self): return self def __next__(self): value = self.curr self.curr += self.prev self.prev = value return value f = Fib() print(isinstance(f,Iterable))#True
print(isinstance(f,Iterator))#True

結論:

可叠代對象:可以進行for循環都是可叠代對象,原因是其內部實現了一個__iter__方法

叠代器:能夠進行next(叠代器對象),都是叠代器對象,其內部實現了__iter__和__next__方法

生成器:元祖推導式和函數裏使用yield的函數都是生成器

生成器屬於叠代器
叠代器屬於可叠代對象

  

可叠代對象、叠代器、生成器之間的關系