python--迭代器(Iterator)


  博客地址:http://www.cnblogs.com/yudanqu/

1、可迭代對象 

  • 在介紹迭代器之前呢,我們先聊一下可迭代對象(Iterable),可迭代對象就是可以直接作用於for循環的對象。
  • 那么什么是可以直接用於for循環的呢?
  • 可以直接用於for的數據類型一般分為兩種:

    1、集合數據類型,如list、tuple、dict、set、string……

    2、generator,包括生成器和帶yield的generator function

  • 那么我們如何判斷一個對象是否是可迭代對象呢?答:isinstance()

  ************************************************************************************************************************************

  描述:isinstance() 函數來判斷一個對象是否是一個已知的類型

  語法:isinstance(object, classinfo)

  參數:(1)object -- 實例對象

        (2)classinfo -- 可以是直接或間接類名、基本類型或者由它們組成的元組

  返回值:如果對象類型與classinfo的類型相同則返回True,否則返回False

  ************************************************************************************************************************************

  那么我下面給大家看個小栗子:

        

  在這里面,首先我導入的Iterable的包,也就是可迭代對象,下面的四條語句是分別查看列表、元組、字典、字符串的類型,可以看到他們四個都是可迭代對象,當然,可迭代對象遠不止這些,這里只是給大家一個概念,並且看一下isinstance的使用方法。如果你還不能理解的話,可以想一下,你有沒有寫過這樣一句話(for i in [1,2,3,4,5]),這是一個循環的表示方法,這里面就是在循環列表中的元素,來實現內部語句塊。也可以說成是遍歷這個列表,當然也就是迭代了。

2、迭代器

  迭代器就是不但可以作用於for循環,還可以被next()不斷的調用並返回下一個值,知道最后拋出一個錯誤StopIteration錯誤,表示無法繼續返回下一個值。

 對比:
  
  可以被next()函數調用並不斷返回下一個值得對象稱為迭代器 (Iterator)   可以直接作用於for循環的對象統稱為可迭代對象(Iterable)

   下面又是一個小栗子:

  

  里面的isinstance依然是判斷類型,我們可以看到,(x for x in range(5))是一個迭代器,我們可以把這個迭代器用一個屬性來接收,這樣方便我們調用。注意上面提到的,迭代器是可以被next()調用的,所以我們next(L)來迭代輸出里面的值。

  

  現在的這些返回值為False,大家應該了解他的原因了吧,[](){}"" 等等這些都只是可迭代對象,而不是迭代器。(注意那兩個單詞是不一樣的)

  除此之外還需要說明的一點是,其他的數據類型也可以轉為迭代器:

# 例如:列表轉迭代器:
a = iter([1,2,3,4])
print(next(a))

  元組,字符串,字典都可以這樣。

 *下面用一個小案例讓大家看下他的用法

endstr = 'end'
str = ""

for line in iter(input,endstr):
    str += line + '\n'

print(str)
#目的就是為了使input不直接退出,可以換行繼續輸入;而且在打印str時也可以分行同時打印

  看一下效果:

  

  迭代器大概就先介紹到這里,歡迎大家和我來一起學習。

 

  作者:漁單渠(yudanqu)

  博客地址:http://www.cnblogs.com/yudanqu/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM