python中for迴圈的底層實現機制 迭代

2021-08-20 13:53:59 字數 1117 閱讀 8772

在python中,存在2種迴圈方式:for迴圈和while迴圈。

while迴圈的實現很簡單, 其本質就是乙個條件語句,自定義條件,當條件滿足的時候,不斷執行while**塊。

但是for迴圈,究竟是怎麼回事呢?說到for迴圈,那麼就不能不講到迭代了

迭代

python中迭代物件分2種:迭代器物件(iterator)、可迭代物件(iterable)。

tips:如何判斷乙個物件是迭代器物件還是可迭代物件?

from collections

import iterable, iterator

isinstance(object, class),第乙個引數為物件,第二個引數為類名;返回值為true,即物件為

1.可迭代物件

很多python的資料型別都是可迭代物件:列表、字典、元組、字串等

a = [

1, 2,

3]isinstance(a, iterable)

# true

注意:可迭代物件,並不是迭代器物件

2.迭代器物件

迭代器物件依賴iter(args)方法來實現,引數args必須是乙個可迭代物件

a = [

1, 2,

3]b =

iter(a)

isinstance(b, iterator)

# true

isinstance

(b, iterable)

# true

由此可以看出,迭代器物件,同時也是可迭代物件

那麼,這2個物件,到底和for迴圈的關係在**呢?

for迴圈

我們都知道,迭代器物件,實現了__next__()方法,可以不斷呼叫該方法,返回迭代器物件的每個元素    

for迴圈的物件,必須是可迭代物件。而

在底層,所有的可迭代物件均內建了__iter__()方法,返回值為迭代器物件。

此時,我們便明了了,for迴圈本質上呼叫了可迭代物件的__iter__()方法,得到了該物件對應的迭代器物件,然後無限呼叫__next__()方法,得到物件中的每乙個元素。直到stopiteration異常,代表迭代器中已無下乙個元素,for迴圈自動處理該異常,跳出迴圈。

python中的for迴圈底層原理詳解

一 構建乙個可迭代物件 列表 元組 字典等 tuple01 dict01自帶有 iter 屬性,即為可迭代物件 tuple01 stay hungry stay foolish keep looking,don t sate hobbies dict01 二 用for迴圈來進行迭代 1 如下所示 f...

for迴圈 底層工作原理

for 迴圈是對容器進行迭代的過程。迭代就是從某個容器物件中逐個地讀取元素,直到容器中沒有更多元素為止。先判斷物件是否為可迭代物件,不是的話直接報錯,丟擲typeerror異常,是的話,呼叫 iter 方法,返回乙個迭代器 不斷地呼叫迭代器的 next 方法,每次按序返回迭代器中的乙個值 迭代到最後...

python中的for迴圈

一 for迴圈概要 for迴圈是乙個通用序列迭代器,可遍歷任何有序的序列物件內的元素,包括字串 列表 元組 其他內建可迭代物件。一般格式 for in if break if continue else 二 for迴圈應用舉例 1 遍歷序列元素 for x in spam eggs ham prin...