86 python高階 迭代器

2021-09-26 07:12:35 字數 1928 閱讀 8662

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

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

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

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

這些可以直接作用於 for 迴圈的物件統稱為可迭代物件: 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 錯誤表示無法繼續返回下乙個值了。

可以使用 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

生成器都是 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

python迭代器高階

我們之前簡單的了解了一下迭代器,本篇,我們來看看迭代器具體的使用方法吧!lst 1 2,3 4 import dis 引入標準庫dis,用它觀察for迴圈的細節。dis.dis for i in lst pass 1 0 setup loop 12 to 14 2 load name 0 lst 4...

python高階特性 迭代器

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

python 函式高階 迭代器

迭代 可以理解成迴圈,迭代一次,迴圈一次 根據所學知識我們知道,直接作用於for迴圈的資料型別有 一是集合資料型別,如str list,tuple,dict,set等 一類是generator,如,生成器和帶yield的generator function 這些可以直接作用於for迴圈的物件統稱為可...