1. 程式人生 > >Python不歸路_叠代器

Python不歸路_叠代器

方法 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不歸路_叠代器