python之迭代器

2021-08-22 17:52:47 字數 1243 閱讀 7086

首先需要搞清楚兩個概念:可迭代,迭代器,兩者不能混為一談。

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

python裡可以用isinstance( ,

iterable

)來檢測第乙個引數是不是可迭代的(這裡第乙個引數是乙個列表)。

注意,可迭代和

迭代器 

是不一樣的!!!

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

用isinstance( ,

iterator

)來檢測第乙個引數是不是迭代器(列表返回false,不是迭代器,但是可迭代的)。

list、dict

、str

等資料型別

雖然是可迭代的(iterable),但它們

不是迭代器(iterator)!!!!

當然可以用 iter( ) 或者 iter(

『abc

』) 可以把它變成迭代器。

為什麼不是?迭代器物件表示的是乙個資料流,而只能用next()函式不斷呼叫不斷返回下乙個值,直到沒有資料,同時也不能直到具體長度。所以迭代器是惰性計算的,只有當走到這他才算出這一步,而列表字典什麼的都是算好了放在記憶體裡的。

事實上,python裡的for迴圈本質就是不斷呼叫next()函式實現的,下面兩段**完全等價:

'''**一'''

for i in [1, 2, 3, 4, 5]:

pass

'''**二'''

# 首先獲得iterator物件:

it = iter([1, 2, 3, 4, 5])

# 迴圈:

while true:

try:

# 獲得下乙個值:

x = next(it)

except stopiteration:

# 遇到stopiteration就退出迴圈

break

python裡迭代器要理解的概念差不多就這些。

python之迭代器

可迭代物件就是序列觀念的通用化,如果物件是實際儲存的序列,或者可以在迭代工具環境 eg for迴圈 中一次產生乙個結果的物件,就可看成是可迭代的。可迭代物件包括實際序列和按照需求而計算的虛擬序列。常見的迭代工具 for迴圈 列表解析 in成員關係測試以及map內建函式等。1.檔案迭代器 readli...

Python之迭代器

我們已經知道,可以直接作用於for迴圈的資料型別有以下幾種 一類是集合資料型別,如list tuple dict set str等 一類是generator,包括生成器和帶yield的generator function。這些可以直接作用於for迴圈的物件統稱為可迭代物件 iterable。可以使用...

Python之迭代器

檔案迭代器 方法 next 手動迭代 內建函式iter和next 其他型別迭代器 自定義迭代器 具體用途 乙個實現了 iter 方法和 next 方法的物件,就是迭代器 內建函式next會自動呼叫乙個物件的 next 方法。給定乙個可迭代物件x,呼叫next x 等同於x.next 該迭代器根據需要...