Python不歸路_叠代器
阿新 • • 發佈:2017-08-27
方法 rom 但是 sta logs next 又是 結果 code
叠代器:
for循環可以對兩類數據類型進行叠代:
1.比如list、tuple、dict、set等
2.帶有yield關鍵字的函數或者能用__next__()進行調用的,也就是生成器
能被for調用的對象都是Iterable的,可以使用isinstance方法驗證是不是Iterable
from collections import Iterable a=[1,‘b‘,‘c‘] b={‘name‘:‘gally‘,‘age‘:23} isinstance(a,Iterable) isinstance(b,Iterable)
輸出結果:
True
True
那麽既然list、tuple、dict、set等都是Iterable,那是不是Iterator呢?我們仍然可以使用isinstance來判斷。
from collections import Iterator isinstance(a,Iterator) isinstance(b,Iterator)
輸出結果:
False
False
很明顯list、set、tuple、dict都不是叠代器,但是它們是可以叠代的。那能否把它們也變成叠代器呢?
from collections import Iterator a=[1,‘b‘,‘c‘] isinstance(iter(a),Iterator)
輸出結果:
True
小結:List、Set、tuple、dict等是Iterable,但不是Iterator,使用Iter()方法可以使可叠代對象變成叠代器。
接下來我們來看生成器是否Iterable和Iterator,同樣我們還是用isinstance來驗證。
from collections import Iterator
def func1(x): while x < 1000: n = x**2 yield n x+=1 f=func1(200)
isinstance(f,Iterator)#判斷是否是叠代器
輸出結果:
True
from collections import Iterable isinstance(f,Iterable)
輸出結果:
True
小結:生成器既是Iterable,又是Iterator。
總結:能用for循環的都是Iterable類型。
list、dict、set、tuple等都是Iterable但不是Iterator,可以通過Iter()函數使其變為Iterator。
生成器都是叠代器。
Python不歸路_叠代器