python的迭代器 Python 迭代器

2021-10-11 12:24:35 字數 1776 閱讀 5910

迭代器

​ 迭代是訪問集合元素的一種方式。迭代器是乙個可以記住遍歷的位置的物件。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。

可迭代物件

以直接作用於 for 迴圈的資料型別有以下幾種:

一類是集合資料型別,如 list 、 tuple 、 dict 、 set 、 str 等;

一類是 generator ,包括生成器和帶 yield 的generator function。

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

判斷是否可以迭代(iterable)

​ 可以使用 isinstance() 判斷乙個物件是否是 iterable 物件:

in [50]: from collections import iterable

in [51]: isinstance(, iterable)

out[51]: true

in [52]: isinstance({}, iterable)

out[52]: true

in [53]: isinstance('abc', iterable)

out[53]: true

in [54]: isinstance((x for x in range(10)), iterable)

out[54]: true

in [55]: isinstance(100, iterable)

out[55]: false

​ 而生成器不但可以作用於 for 迴圈,還可以被 next() 函式不斷呼叫並返回下乙個值,直到最後丟擲 stopiteration 錯誤表示無法繼續返回下乙個值了。

迭代器(iterator)

​ 可以使用 isinstance() 判斷乙個物件是否是 iterator 物件:

in [56]: from collections import iterator

in [57]: isinstance((x for x in range(10)), iterator)

out[57]: true

in [58]: isinstance(, iterator)

out[58]: false

in [59]: isinstance({}, iterator)

out[59]: false

in [60]: isinstance('abc', iterator)

out[60]: false

in [61]: isinstance(100, iterator)

out[61]: false

iter()函式

生成器都是 iterator 物件,但 list 、 dict 、 str 雖然是 iterable ,卻不是 iterator 。

把 list 、 dict 、 str 等 iterable 變成 iterator 可以使用 iter() 函式:

in [62]: isinstance(iter(), iterator)

out[62]: true

in [63]: isinstance(iter('abc'), iterator)

out[63]: true

總結凡是可作用於 for 迴圈的物件都是 iterable 型別;

凡是可作用於 next() 函式的物件都是 iterator 型別

集合資料型別如 list 、 dict 、 str 等是 iterable 但不是 iterator ,不過可以通過 iter() 函式獲得乙個 iterator 物件。

python中迭代器的基本方法 Python迭代器

迭代器是可以迭代的物件。在本教程中,您將了解迭代器的工作原理,以及如何使用 iter 和 next 方法構建自己的迭代器。迭代器在python中無處不在。它們優雅地實現在迴圈,推導,生成器等中,但隱藏在明顯的視覺中。python中的迭代器只是乙個可以迭代的物件。乙個將一次返回資料的物件或乙個元素。從...

python的迭代器 python 迭代器

在介紹迭代器之前,先說明下迭代的概念 迭代 通過for迴圈遍歷物件的每乙個元素的過程。python的for語法功能非常強大,可以遍歷任何可迭代的物件。在python中,list tuple string dict set bytes都是可以迭代的資料型別。可以通過collections模組的iter...

python的迭代器 Python 迭代器

概述迭代器是訪問集合元素的一種方式。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。延遲計算或惰性求值 lazy evaluation 迭代器不要求你事先準備好整個迭代過程中所有的元素。僅僅是在迭代至某個元素時才計算該元素,而在這之前或之後,元素可以不存在或...