Python迭代物件和迭代器

2022-06-30 09:48:10 字數 2947 閱讀 4409

str  list   tuple  dic  set  range 檔案控制代碼等,那麼int,bool這些為什麼不能稱為可迭代物件呢?雖然在字面意思這些看著不符合,但是我們要有一定的判斷標準或者規則去判斷該物件是不是可迭代物件。

在python中,但凡內部含有__iter__方法的物件,都是可迭代物件

該物件內部含有什麼方法除了看原始碼還有什麼其他的解決方式麼?當然有了, 可以通過dir() 去判斷乙個物件具有什麼方法

s1 = 'heian'

print(dir(s1))

dir()會返回乙個列表,這個列表中含有該物件的以字串的形式所有方法名。這樣我們就可以判斷python中的乙個物件是不是可迭代物件了:

s1 = 'heian'

i = 100

print('__iter__' in dir(i)) # false

print('__iter__' in dir(s1)) # true

name = [1,2,3,4]

print(dir(name))

print('__iter__' in dir(name))

字面意思:迴圈更新的乙個實實在在的值

內部意思:內部含有「__iter__()」方法的物件,可迭代物件

判斷方法:'__iter__' in dir(物件)

str list tuple dict set range

優點:1.儲存的資料直接能顯示,比較直觀

2.擁有的方法比較多,操作方便

缺點:1.占用記憶體

2.不能直接通過for迴圈,不能直接取值(索引和key除外)

for迴圈在底層做了乙個小小的轉化,就是先將可迭代物件轉化成迭代器,然後在進行取值的。

從字面意思來說迭代器,是乙個可以迭代取值的工具,器:在這裡當做工具比較合適。

從專業角度來說:迭代器是這樣的物件:實現了無引數的__next__方法,返回序列中的下乙個元素,如果沒有元素了,那麼丟擲stopiteration異常.python中的迭代器還實現了__iter__方法,因此迭代器也可以迭代。 出自《流暢的python》

那麼對於上面的解釋有一些超前,和難以理解,不用過於糾結,我們簡單來說:在python中,內部含有'__iter__'方法並且含有'__next__'方法的物件就是迭代器。

with open('heian',mode='w',encoding='utf-8') as f:

print('__iter__' in dir(f) and '__next__' in dir(f))

l1 = [1, 2, 3, 4, 5, 6]

obj = l1.__iter__()

# 或者 iter(l1)print(obj)

#

可迭代物件是不可以一直迭代取值的(除去用索引,切片以及key),但是轉化成迭代器就可以了,迭代器是利用__next__()進行取值:

l1 = [1, 2, 3,]

obj = l1.__iter__() # 或者 iter(l1)

# print(obj) # ret = obj.__next__()

print(ret)

ret = obj.__next__()

print(ret)

ret = obj.__next__()

print(ret)

ret = obj.__next__() # stopiteration

print(ret)

# 迭代器利用next取值:乙個next取對應的乙個值,如果迭代器裡面的值取完了,還要next,

# 那麼就報stopiteration的錯誤。

l1 = [1, 2, 3, 4, 5, 6]

# 1 將可迭代物件轉化成迭代器

obj = iter(l1)

# 2,利用while迴圈,next進行取值

while 1:

# 3,利用異常處理終止迴圈

try:

print(next(obj))

except stopiteration:

break

優點:

1.節省記憶體

2.惰性機制。 next一次,取乙個值,絕不過多取值。​

缺點:1.速度慢

2.不走回頭路

l1 = [1, 2, 3, 4, 5, 6]

obj = iter(l1)

for i in range(2):

print(next(obj))

for i in range(2):

print(next(obj))

可迭代物件:

是乙個私有的方法比較多,操作靈活(比如列表,字典的增刪改查,字串的常用操作方法等),比較直觀,但是占用記憶體,而且不能直接通過迴圈迭代取值的這麼乙個資料集。

應用:當你側重於對於資料可以靈活處理,並且記憶體空間足夠,將資料集設定為可迭代物件是明確的選擇。

迭代器:

是乙個非常節省記憶體,可以記錄取值位置,可以直接通過迴圈+next方法取值,但是不直觀,操作方法比較單一的資料集。

應用:當你的資料量過大,大到足以撐爆你的記憶體或者你以節省記憶體為首選因素時,將資料集設定為迭代器是乙個不錯的選擇。(可參考為什麼python把檔案控制代碼設定成迭代器)。

python迭代物件和迭代器

一.迭代物件 1.概念 迭代物件 可以直接作用於for迴圈的物件統稱為可迭代物件 iterable。2.可以直接作用於for迴圈的資料型別 1 集合類資料型別,如list,tuple,dict,set,str等 2 generator,包括生成器和帶yield的generator function....

python迭代 可迭代物件與迭代器物件

問題舉例 某軟體要求,從網路抓取各個城市的氣溫資訊,並依次顯示 北京 15 22 上海 18 23 如果一次抓取所有城市氣溫資訊再顯示,顯示第乙個城市的氣溫時會由很長的延時,並且浪費儲存空間,我們期望以 用時訪問 的策略,並且把所有城市的氣溫資訊封裝 到乙個物件裡,可用for語句進行迭代。來個栗子 ...

Python的可迭代物件和迭代器物件

迭代器指的是迭代取值的工具,迭代是指乙個重複的過程,每一次重複都是基於上一次結果而來,迭代提供了一種通用的不依賴索引的迭代取值方式 但凡內建有 iter 方法的物件,都稱為可迭代物件,可迭代的物件 str,list,tuple,dict,set,檔案物件 1.既內建又 next 方法的物件,執行該方...