1. 程式人生 > >可迭代物件(iterable)與迭代器型別(iterator)

可迭代物件(iterable)與迭代器型別(iterator)

首先,廖雪峰老師的教程中解釋了迭代器和生成器,這篇文章只是補充和我個人的總結。

什麼是迭代

可以直接作用於for迴圈的物件統稱為可迭代物件(Iterable)。

可以被next()函式呼叫並不斷返回下一個值的物件稱為迭代器(Iterator)。

所有的Iterable均可以通過內建函式iter()來轉變為Iterator。

對迭代器來講,有一個__next()就夠了。在你使用for 和 in 語句時,程式就會自動呼叫即將被處理的物件的迭代器物件,然後使用它的next__()方法,直到監測到一個StopIteration異常。

Python
123456789101112131415161718>>>L=[1,2,3]>>>[x**2forxinL][1,4,9]>>>next(L)Traceback(most recent call last):File"<stdin>",line1,in<module>TypeError:'list'objectisnotan iterator>>>I=iter(L)>>>next(I)1>>>next(I)2>>>next(I)3>>>
next(I)Traceback(most recent call last):File"<stdin>",line1,in<module>StopIteration

上面例子中,列表L可以被for進行迴圈但是不能被內建函式next()用來查詢下一個值,所以L是Iterable。

L通過iter進行包裝後設為I,I可以被next()用來查詢下一個值,所以I是Iterator。

題外話:

  1. 內建函式iter()僅僅是呼叫了物件的__iter()方法,所以list物件內部一定存在方法iter__()
  2. 內建函式next()僅僅是呼叫了物件的__next()方法,所以list物件內部一定不存在方法next__(),但是Itrator中一定存在這個方法。
  3. for迴圈內部事實上就是先呼叫iter()把Iterable變成Iterator在進行迴圈迭代的。
Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 >>>L=[4,5,6] >>>I=L.__iter__() >>>

相關推薦

物件iterable型別(iterator)

首先,廖雪峰老師的教程中解釋了迭代器和生成器,這篇文章只是補充和我個人的總結。 什麼是迭代 可以直接作用於for迴圈的物件統稱為可迭代物件(Iterable)。 可以被next()函式呼叫並不斷返回下一個值的物件稱為迭代器(Iterator)。

javascript語言擴充套件:物件4

js 1.7中還包含一個數組推導(array comprehension)的特性,如果不在最後介紹它好像顯得不怎麼完整。 陣列推導其實很簡單: let a = [x*x for(x in range(0,10)) if(x%2===0)]; 以上程式碼

.NET物件Windows控制:控制碼分類和.NET控制碼洩露的例子

上一篇文章介紹了控制代碼的基本概念,也描述了C#中建立檔案控制代碼的過程。我們已經知道控制代碼代表Windows內部物件,檔案物件就是其中一種,但顯然系統中還有更多其它型別的物件。本文將簡單介紹Windows物件的分類。 控制代碼可以代表的Windows物件分為三類,核心物件(Kernel Object)、

Python3快速入門——7iterable

迭代(iterable)#任何可迭代物件都可以作用於for迴圈,包括我們自定義的資料型別,只要符合迭代條件,就可以使用for迴圈d = {'a': 1, 'b': 2, 'c': 3} #對dict迭

Swift入門——選類型Optionals斷言Assert

nil swift implicit 條件 標註 float sta 出現 完整 可選類型是什麽? 首先看一個問題,Swift中String類型的變量有一個叫做to

【 Verilog 】暫存資料型別reg線網資料型別wire,tri

暫存器資料型別 Verilog中規定,凡是在程式塊中被賦值的變數,都必須是暫存器型別的。(程式塊:例如always塊) 這裡未免還是會讓人產生疑惑?暫存器資料型別的變數最後一定會被綜合成暫存器嗎?

ARCEngine中的顏色瀏覽器物件ColorBrowser,顏色選擇物件ColorSelector,顏色板物件Colorpalatte

目錄 顏色瀏覽器物件(ColorBrowser): 顏色選擇器物件(ColorSelector): 顏色板物件(Colorpalatte): 名稱空間:ESRI.ArcGIS.Framework; GetRGB函式: private IColor GetR

ssm中mybatis處理資料庫mysqlpojo屬性中型別不一致string轉date

        一般在表設計的時候會考慮到資料庫欄位型別和java中屬性一致的問題,但是也有可能會出現一些情況導致型別不一致的問題,比如:二次開發中需求更改等。此時資料庫和java中的程式碼不能隨便更改,所以考慮的思路是通過typeHandler作為中間體來把型別轉換。  

連結串列翻轉的圖文講解遞迴直接迴圈翻轉指標兩種實現【轉】

連結串列的翻轉是程式設計師面試中出現頻度最高的問題之一,常見的解決方法分為遞迴和迭代兩種。最近在複習的時候,發現網上的資料都只告訴了怎麼做,但是根本沒有好好介紹兩種方法的實現過程與原理。所以我覺得有必要好好的整理一篇博文,來幫忙大家一步步理解其中的實現細節。   我們知道

增強學習——策略

在上一篇文章中,我主要介紹了馬爾可夫決策過程(MDP)。在瞭解了增強學習的基本思想後,我們便可以繼續討論“最優策略”的求解方法: 我們之前已經說到了MDP可以表示成一個元組(X, A, Psa, R),我們對最優策略的求解方法自然也就與這個元組密切相關:如果該過程的四

斐波那契數列遞迴

int Fbi(int i)/*這裡Fbi就是函式自己,等於在呼叫自己*/ {  if(i<2)   return i==0?0:1;  return Fbi(i-1)+Fbi(i-2); } int main() {  int i;  int a[40];  printf("迭代顯示斐波那契數列:\

iteratorstraits程式設計技巧

//iterator_traits的預設版本 template<typename I> class iterator_traits { //每種容器的迭代器都必須定義value_type,value_type,pointer,reference,iterator_category typede

軟工作業: 2硬幣遊戲—— 碼分析改進

style hold -a p s alpha .py get 倉庫 xlabel 軟工作業: (2)硬幣遊戲—— 代碼分析與改進 一、作業要求 1、Python 程序閱讀理解 2、學習Python 編碼風格指南中譯版(Google SOC)(http://blog.csd

2硬幣遊戲—— 碼分析改進

res () 遊戲 xlabel lis plot time 運行 mage 1、將你的倉庫Game.git clone到本地, 運行Python 程序,截圖 2、修改代碼 #!/usr/bin/env python3# -*- coding: utf-8 -*-im

python學習--如何實現對象itearable和叠iterator

dict 作用 pri 返回 -- 生成器 ble ear item 關於可叠代對象Iterable 和叠代器對象iterator 可叠代對象:可以直接作用於for循環的對象統稱為可叠代對象:Iterable。 可叠代對象包含一個__iter__方法,或__getitem_

Python函數篇4之叠生成器

依賴 true windows 想要 bject 多個 介紹 中文 linux系統中 1.文件操作的“b模式”(補充)   在上一篇文章中,我在最後一部分寫了文件處理的一些方法,但是覺得還是有必要再提一下如下的內容:   像rb、wb、ab這種模式,是以字節的形式操作,需要

鏈表翻轉的圖文講解遞歸兩種實現

art space rst 方式 sin 非遞歸實現 class 添加 技術  鏈表的翻轉是程序員面試中出現頻度最高的問題之一,常見的解決方法分為遞歸和叠代兩種。最近在復習的時候,發現網上的資料都只告訴了怎麽做,但是根本沒有好好介紹兩種方法的實現過程與原理。所以我覺得有必要

機器語言機器碼原生

機器語言:https://blog.csdn.net/Ideality_hunter/article/details/72675714 原生代碼:         CPU依靠指令來計算和控制系統,每款CPU

JavaSE之面向物件程式設計—類物件

1.面向物件程式設計簡介: [點一下就可以看到這個內容喲] (https://blog.csdn.net/ZhuiZhuDream5/article/details/83831961) 2.類與物件的定義與使用: [帶你進一步走進java] (https://blog.csdn.net/Zh

JavaSE之面向物件程式設計—類物件—— 5

首先我們來認識一下static關鍵字表示什麼:static關鍵字表示靜態的意思,更加通俗的解釋就是static修飾屬性或者方法它表示類的屬性或者方法,而前面所學的都表示物件的熟悉感或者方法。下面我們將從兩個方面來介紹static關鍵字。 一、static屬性 static屬性也叫類屬性,對於