標籤:驗證 產生 false color bsp 小結 instance 資料類型 lis
迭代器:
for迴圈可以對兩類資料類型進行迭代:
1.比如list、tuple、dict、set等
2.帶有yield關鍵字的函數或者能用__next__()進行調用的,也就是產生器
能被for調用的對象都是Iterable的,可以使用isinstance方法驗證是不是Iterable
from collections import Iterablea=[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 Iteratorisinstance(a,Iterator)isinstance(b,Iterator)
輸出結果:
False
False
很明顯list、set、tuple、dict都不是迭代器,但是它們是可以迭代的。那能否把它們也變成迭代器呢?
from collections import Iteratora=[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+=1f=func1(200)
isinstance(f,Iterator)#判斷是否是迭代器
輸出結果:
True
from collections import Iterableisinstance(f,Iterable)
輸出結果:
True
小結:產生器既是Iterable,又是Iterator。
總結:能用for迴圈的都是Iterable類型。
list、dict、set、tuple等都是Iterable但不是Iterator,可以通過Iter()函數使其變為Iterator。
產生器都是迭代器。
Python不歸路_迭代器