Python不歸路_迭代器

來源:互聯網
上載者:User

標籤:驗證   產生   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不歸路_迭代器

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.