迭代是訪問集合元素的一種方式。迭代器是乙個可以記住遍歷的位置的物件。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。
以直接作用於 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迴圈的物件統稱為可...